CN113886481B - 一种数据库访问方法和系统 - Google Patents

一种数据库访问方法和系统 Download PDF

Info

Publication number
CN113886481B
CN113886481B CN202111473193.9A CN202111473193A CN113886481B CN 113886481 B CN113886481 B CN 113886481B CN 202111473193 A CN202111473193 A CN 202111473193A CN 113886481 B CN113886481 B CN 113886481B
Authority
CN
China
Prior art keywords
instruction
database
http message
sql
jdbc
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202111473193.9A
Other languages
English (en)
Other versions
CN113886481A (zh
Inventor
贾永强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Yusys Technologies Group Co ltd
Original Assignee
Beijing Yusys Technologies Group Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Yusys Technologies Group Co ltd filed Critical Beijing Yusys Technologies Group Co ltd
Priority to CN202111473193.9A priority Critical patent/CN113886481B/zh
Publication of CN113886481A publication Critical patent/CN113886481A/zh
Application granted granted Critical
Publication of CN113886481B publication Critical patent/CN113886481B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种数据库访问方法和系统,该方法包括:数据库代理驱动程序从应用程序接收JDBC应用编程接口API,基于JDBC API指令和http消息的转换关系映射表,将JDBC API指令转换为http消息,将http消息发送给数据库代理服务;数据库代理服务接收http消息,基于JDBC API指令和http消息的转换关系映射表,将http消息转换为目标数据库的驱动包的JDBC API指令,根据目标数据库的驱动包的JDBC API指令实现对目标数据库的访问。该发明屏蔽了不同数据库驱动的差异化,对外提供统一的代理驱动,简化了APP的开发。

Description

一种数据库访问方法和系统
技术领域
本发明涉及数据库技术领域,具体涉及一种数据库访问方法和系统。
背景技术
在信息化社会,能够存储和管理大量数据的数据库,成为管理信息系统、办公自动化系统、决策支持系统以及交易平台等各类信息系统的核心部分。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
(1)客户现场数据库环境复杂,产品需要和各种不同的数据库做兼容适配,对于每一种数据库都要引入不同的驱动包。
(2)对于不同的数据库,缺乏统一的有效管理。
发明内容
有鉴于此,本发明实施例的目的在于提供一种数据库访问方法和系统,以简化应用程序开发的复杂度,兼容适配不同的数据库类型,屏蔽不同数据库类型的差异。
为达上述目的,第一方面,本发明实施例提供一种数据库访问方法,所述方法包括:
数据库代理驱动程序从应用程序接收用于访问目标数据库的JDBC应用编程接口API指令,基于JDBC API指令和http消息的转换关系映射表,将所述JDBC API指令转换为http消息,将所述http消息发送给所述数据库代理服务;
所述数据库代理服务接收所述http消息,基于所述JDBC API指令和http消息的转换关系映射表,将所述http消息转换为目标数据库的驱动包的JDBC API指令,根据所述目标数据库的驱动包的JDBC API指令实现对所述目标数据库的访问。
在一些可能的实施方式中,所述数据库代理服务,与多种数据库连接,用于通过多个驱动包相应地提供多种数据库的适配服务。
在一些可能的实施方式中,所述数据库代理驱动程序基于JDBC API指令和http消息的转换关系映射表,将所述JDBC API指令转换为http消息的步骤具体包括:
当所述JDBC API指令是查询元数据指令时,将所述查询元数据指令基于所述转换关系映射表中预设的第一组映射关系,转换为用于查询元数据的http消息;其中,所述查询元数据指令用于查询所述目标数据库中的元数据,用于查询元数据的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是结构化查询语言SQL操作指令时,将所述SQL操作指令基于所述转换关系映射表中预设的第二组映射关系,转换为用于执行数据操作的http消息;其中,所述用于执行数据操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是事务操作指令时,将所述事务操作指令基于所述转换关系映射表中预设的第三组映射关系,转换为用于执行事务操作的http消息;其中,所述用于执行事务操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接。
在一些可能的实施方式中,上述方法具体包括:
当所述查询元数据指令是获取数据库的目录的第一指令时,将所述第一指令基于所述第一组映射关系中的第一映射关系,转换为用于获取数据库的目录的http消息;
当所述查询元数据指令是获取数据库的模式的第二指令时,将所述二指令基于所述第一组映射关系中的第二映射关系,转换为用于获取数据库的模式的http消息;
当所述查询元数据指令是获取数据库的表的第三指令时,将所述第三指令基于所述第一组映射关系中的第三映射关系,转换为用于获取数据库的表的http消息;
当所述查询元数据指令是获取数据库的表字段的第四指令时,将所述第四指令基于所述第一组映射关系中的第四映射关系,转换为用于获取数据库的表字段的http消息。
在一些可能的实施方式中,上述方法具体包括:
当所述SQL操作指令是预加载SQL指令时,将所述预加载SQL指令基于所述第二组映射关系中的第五映射关系,转换为用于执行预加载SQL的http消息;
当所述SQL操作指令是运行查询SQL的指令时,将所述运行查询SQL的指令基于所述第二组映射关系中的第六映射关系,转换为用于运行查询SQL的http消息;其中,所述运行查询SQL的指令用于查询获取预设数量条数据记录;
当所述SQL操作指令是拉取数据指令时,将所述拉取数据指令基于所述第二组映射关系中的第七映射关系,转换为用于查询至少一批数据的http消息;其中,所述至少一批数据的条数大于所述预设数量对应的条数;
当所述SQL操作指令是关闭预处理指令时,将所述关闭预处理指令基于所述第二组映射关系中的第八映射关系,转换为用于关闭预加载SQL的http消息;
当所述SQL操作指令是执行批量更新操作指令时,将所述执行批量更新操作指令基于所述第二组映射关系中的第九映射关系,转换为用于执行批量更新操作的http消息;
当所述SQL操作指令是预加载SQL指令和运行查询SQL的指令构成的第一组合指令时,将所述第一组合指令基于所述第二组映射关系中的第十映射关系,转换为用于执行预加载SQL和运行查询SQL的http消息;
当所述SQL操作指令是预加载SQL指令和执行批量更新操作指令构成的第二组合指令时,将所述第二组合指令基于所述第二组映射关系中的第十一映射关系,转换为用于执行预加载SQL和执行批量更新操作的http消息。
在一些可能的实施方式中,上述方法具体包括:
当所述JDBC API指令是提交事务操作指令时,将所述提交事务操作指令基于所述第三组映射关系中的第十二映射关系,转换为用于执行提交事务操作的http消息;
当所述JDBC API指令是事务回滚操作指令时,将所述事务回滚操作指令基于所述第三组映射关系中的第十三映射关系,转换为用于执行事务回滚操作的http消息。
在一些可能的实施方式中,所述方法还包括:
数据库代理驱动程序从应用程序接收用于与目标数据库第一次建立连接的第一初始JDBC API指令,所述第一初始JDBC API指令中携带数据库代理服务的第一JDBC统一资源定位符URL;基于JDBC API指令和http消息的转换关系映射表中第四组映射关系包含的第十四映射关系,将所述第一初始JDBC API指令转换为初始http消息;根据所述数据库代理服务的第一JDBC URL,将所述初始http消息发送给所述数据库代理服务;
所述数据库代理服务接收所述初始http消息,从所述数据库代理服务的JDBC URL中获得目标数据库的访问路径;根据所述目标数据库的访问路径从所述数据库代理服务上预先存储的数据库配置信息中获取所述目标数据库的类型、目标数据库对应的主机IP地址、目标数据库的端口、以及目标数据库的名称;根据所述目标数据库的类型、目标数据库对应的主机IP地址、目标数据库的端口、以及目标数据库的名称,确定所述目标数据库的JDBC URL;基于所述第十四映射关系,将所述初始http消息转换为第二初始JDBC API,所述第二初始JDBC API中携带所述目标数据库的第二JDBC URL;根据所述第二初始JDBC API与所述目标数据库建立连接。
第二方面,提供一种数据库访问系统,所述系统包括:数据库代理驱动程序和数据库代理服务;
所述数据库代理驱动程序,用于接入应用程序,使所述应用程序访问所述数据库代理服务接入的多种数据库;所述数据库代理驱动程序采用数据库代理JDBC驱动程序,其包括:收发模块,用于从应用程序接收用于访问目标数据库的JDBC应用编程接口API指令;第一转换模块,用于基于JDBC API指令和http消息的转换关系映射表,将所述JDBC API指令转换为http消息;http客户端,用于将所述http消息发送给所述数据库代理服务;
所述数据库代理服务,其包括:http服务端,用于接收所述http客户端发送的所述http消息;第二转换模块,用于基于所述JDBC API指令和http消息的转换关系映射表,将所述http消息转换为目标数据库的驱动包的JDBC API指令;多个驱动包,用于一一对应地适配多种数据库,其中,所述目标数据库的驱动包用于根据所述JDBC API指令实现对所述目标数据库的访问。
第三方面,提供一种数据库访问系统,所述系统包括:
客户端设备,用于从应用程序接收用于访问目标数据库的JDBC应用编程接口API指令,基于JDBC API指令和http消息的转换关系映射表,将所述JDBC API指令转换为http消息,将所述http消息发送给服务器;
服务器,用于接收所述http消息,基于所述JDBC API指令和http消息的转换关系映射表,将所述http消息转换为目标数据库的驱动包的JDBC API指令,根据所述目标数据库的驱动包的JDBC API指令实现对所述目标数据库的访问。
在一些可能的实施方式中,所述服务器与多种数据库连接,用于通过多个驱动包相应地提供多种数据库的适配服务。
在一些可能的实施方式中,所述客户端设备具体用于:
当所述JDBC API指令是查询元数据指令时,将所述查询元数据指令基于所述转换关系映射表中预设的第一组映射关系,转换为用于查询元数据的http消息;其中,所述查询元数据指令用于查询所述目标数据库中的元数据,用于查询元数据的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是结构化查询语言SQL操作指令时,将所述SQL操作指令基于所述转换关系映射表中预设的第二组映射关系,转换为用于执行数据操作的http消息;其中,所述用于执行数据操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是事务操作指令时,将所述事务操作指令基于所述转换关系映射表中预设的第三组映射关系,转换为用于执行事务操作的http消息;其中,所述用于执行事务操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接。
在一些可能的实施方式中,所述客户端设备,还用于从应用程序接收用于与目标数据库第一次建立连接的第一初始JDBC API指令,其携带所述服务器的第一JDBC统一资源定位符URL;基于JDBC API指令和http消息的转换关系映射表中的第四组映射关系,将所述第一初始JDBC API指令转换为初始http消息;根据所述服务器的第一JDBC URL,将所述初始http消息发送给所述服务器;
所述服务器,还用于接收所述客户端设备发送的所述初始http消息,从所述第一JDBC URL中获得目标数据库的访问路径;根据所述目标数据库的访问路径从所述服务器上预先存储的数据库配置信息中获取所述目标数据库的类型、目标数据库的主机IP地址、目标数据库的端口、以及目标数据库的名称;根据所述目标数据库的类型、目标数据库的主机IP地址、目标数据库的端口、以及目标数据库的名称,确定所述目标数据库的JDBC URL;基于所述第四组映射关系,将所述初始http消息转换为第二初始JDBC API,所述第二初始JDBC API中携带所述目标数据库的第二初始JDBC URL;根据所述第二初始JDBC API与所述目标数据库建立连接。
上述技术方案具有如下有益效果:
上述技术方案屏蔽了不同数据库驱动的差异化,对外提供一个统一的代理驱动,简化了APP的开发。
本发明提供了一个全新的数据库的JDBC驱动包实现,用户的应用程序依赖此JDBC驱动包后,通过统一的JDBC编程接口(JAVA本地的编程接口),就可以访问远端配置好的各种类型的数据库,在使用方式上,本发明更契合实际应用,对应用程序的影响更小;并且本发明的JDBC驱动包和服务端之间通信通过http协议,对用户是无感知的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的数据库访问系统的总体架构图;
图2是本发明实施例的代理驱动程序的架构图;
图3是本发明实施例的数据库代理服务端的实现架构图;
图4是本发明实施例的方法流程图;
图5是本发明实施例的系统功能框图;
图6是本发明实施例的网络架构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例属于软件技术领域(数据库相关),在企业级应用中可以有较广泛的用途。本发明实施例解决的技术问题包括如下中的至少一个:
1、数据库代理功能,使用本发明实施例的代理驱动可以连接各种类型的数据库;2、数据库网关功能,使用本发明实施例可以提供对数据的过滤加密功能,控制数据的访问权限;3、提供对各个孤立数据库的统一管理功能,提供统一的访问入口。
JDBC(Java DataBase Connectivity,Java数据库连接)是一种可以执行SQL语句的Java API(Application Programming Interface,应用编程接口),可以为多种数据库提供统一访问,是Java语言编写的类和接口的组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使开发人员能够编写数据库应用程序。
实施例一
图1是本发明实施例的系统的总体架构图;图2是本发明实施例的代理驱动程序的架构图;图3是本发明实施例的数据库代理服务端的实现架构图。如图1至图3所示,本发明实施例由两部分组成:数据库代理服务和数据库代理驱动程序。
数据库代理服务,用于提供多种不同数据库的适配服务,提供SQL的执行环境,同时也提供对数据库代理JDBC驱动的支持实现。
数据库代理JDBC驱动是JDBC接口的一个标准实现,是本发明实施例对外提供的一种编程访问方式。应用程序APP引入该驱动程序后,即可以通过该驱动程序访问代理中间件接入的各种的数据源。驱动程序和代理服务之间通过HTTP方式或者TCP方式通信,数据库代理驱动程序充当http客户端,代理服务充当http服务端。
数据库代理驱动程序,用于接入应用程序,使应用程序访问数据库代理服务接入的多种数据库;数据库代理驱动程序采用数据库代理Java数据库连接JDBC驱动程序,其包括:收发模块,用于从应用程序接收JDBC应用编程接口API指令;第一转换模块,用于基于JDBC API指令和http消息的转换关系映射表,将JDBC API指令转换为http消息;http客户端,用于将http消息发送给数据库代理服务;
数据库代理服务,与多种数据库连接,用于提供多种数据库的适配服务;数据库代理服务包括:http服务端,用于接收http客户端发送的http消息;第二转换模块,用于基于JDBC API指令和http消息的转换关系映射表,将http消息转换为目标数据库的驱动包的JDBC API指令;多个驱动包,用于一一对应地适配多种数据库,其中,目标数据库的驱动包用于根据JDBC API指令实现对目标数据库的访问。
后文提到的JDBC驱动或者驱动、驱动程序如果没有特殊说明都是指本发明实施例中的数据库代理JDBC驱动。
后文提到的代理服务或者服务端、代理、http服务端,如果没有特殊说明都是指本发明实施例中的数据库代理服务。
下面详细介绍下本发明中:驱动的实现,该驱动程序起到承上启下的作用,是用户操作数据库代理服务的主要渠道。
再如图2所示,本实施例将JDBC API指令转换为http消息,然后发送给http服务端。在图2中,收发模块基于JDBC API指令的java实现。
表格1的第一列对应的是JDBC API编程接口,第二列对应的是http消息格式。
表1:JDBC API指令和http消息的转换关系映射表
Figure 309170DEST_PATH_IMAGE001
Figure 101677DEST_PATH_IMAGE002
Figure 819097DEST_PATH_IMAGE003
Figure 683148DEST_PATH_IMAGE004
resultSetResponse的定义如下:
{
"response": "resultSet",
"connectionId": "xxx",
"statementId": x,
"ownStatement": true,
"firstFrame":{
"offset": 100,
"done": true,
"rows": [ [ val1, val2, ... ], ... ]
},
"updateCount": 10
}
以下对查询元数据:获取数据库的表字段(column),即ColumnsRequest指令进行解释说明:
字段就是column,字段是组成表的基本元素,一个数据库表是由多个字段组成的,这个接口的作用是根据条件查询字段信息。
作为一个举例,以下是一个表的定义:
CREATE TABLE default.ORG_TABL(
ORG_ID VARCHAR(16),
ORG_NAME VARCHAR(256) ,
ORG_CORP CHAR(180)
)
这个表有三个字段(column):
ORG_ID,ORG_NAME,ORG_CORP;
这个指令的作用就是查询字段信息的,例如:字段名称,字段类型,字段长度等。
下面详细介绍下数据库代理服务端的实现。
如图3所示,数据库代理服务中需要提供一个HTTP服务来接收驱动程序的请求。在图3中,http服务端处于服务层,第二转换模块和多个驱动包处于适配层。
数据库代理服务中需要持有需要适配的各种数据库的驱动包,当代理驱动向本数据库代理服务发送一个请求,本数据库代理服务接收到请求后,将消息内容转换为对应数据库的驱动的JDBC API指令。映射关系见上面的表格1:JDBC API指令和http消息的转换关系映射表。
在一些实施例,数据库代理服务接收到请求后,基于上述表格1将消息内容转换为对应数据库的驱动的JDBC API指令,具体包括如下中的任意一种:
(1)当接收到用于查询元数据的http消息时,基于所述转换关系映射表中预设的第一组映射关系,将用于查询元数据的http消息转换为作为JDBC API指令的查询元数据指令;
(2)当接收到用于执行数据操作的http消息时,基于所述转换关系映射表中预设的第二组映射关系,将用于执行数据操作的http消息转换为作为JDBC API指令的结构化查询语言SQL操作指令;
(3)当接收到用于执行事务操作的http消息时,基于所述转换关系映射表中预设的第三组映射关系,将用于执行事务操作的http消息转换为作为JDBC API指令的事务操作指令。
针对上述第(1)类转换,在一些实施例中,数据库代理服务具体包括执行如下操作:
当接收到用于获取数据库的目录的http消息时,基于所述第一组映射关系中的第一映射关系,将用于获取数据库的目录的http消息转换为用于获取数据库的目录的第一指令,例如CatalogsRequest指令;
当接收到用于获取数据库的模式的http消息时,基于所述第一组映射关系中的第二映射关系,将用于获取数据库的模式的http消息转换为用于获取数据库的模式的第二指令,例如SchemasRequest指令;
当接收到用于获取数据库的表的http消息时,基于所述第一组映射关系中的第三映射关系,将用于获取数据库的表的http消息转换为用于获取数据库的表的第三指令,例如TablesRequest指令;
当接收到用于获取数据库的表字段的http消息时,基于所述第一组映射关系中的第四映射关系,将用于获取数据库的表字段的http消息转换为用于获取数据库的表字段的第四指令,例如ColumnsRequest指令。
针对上述第(2)类转换,在一些实施例中,具体包括执行如下操作:
当接收到用于执行预加载SQL的http消息时,基于第二组映射关系中的第五映射关系,将用于执行预加载SQL的http消息转换为预加载SQL指令,例如PrepareRequest指令;
当接收到用于运行查询SQL的http消息时,基于第二组映射关系中的第六映射关系,将用于运行查询SQL的http消息转换为运行查询SQL的指令,例如ExecuteRequest指令;
当接收到用于查询至少一批数据的http消息时,基于第二组映射关系中的第七映射关系,将用于查询至少一批数据的http消息转换为拉取数据指令;
当接收到用于关闭预加载SQL的http消息时,基于第二组映射关系中的第八映射关系,将用于关闭预加载SQL的http消息转换为关闭预处理指令,例如CloseStatementRequest指令;
当接收到用于执行批量更新操作的http消息时,基于第二组映射关系中的第九映射关系,将用于执行批量更新操作的http消息转换为执行批量更新操作指令,例如ExecuteBatchRequest指令;
以下对批量更新操作指令的使用场景进行解释说明:
例如要根据以下几个条件更新对应的记录:
更新id=1的记录,更新state字段值为100;
更新id=2的记录,更新state字段值为200;
更新id=3的记录,更新state字段值为300;
这个时候就需要调用以下指令完成:
预加载SQL指令:
Figure 169624DEST_PATH_IMAGE005
//预加载指令;
PreparedStatement preparedStatement = connection.prepareStatement(sql);
批量更新操作指令:
List<Object[]> params = new ArrayList<>();
params.add(new Object[]{1,100});
params.add(new Object[]{2,200});
params.add(new Object[]{3,300});
for(int i=0; i<params.size(); i++){
preparedStatement.setInt(1, (Integer) params.get(0)[0]);
preparedStatement.setInt(2, (Integer) params.get(0)[1]);
preparedStatement.addBatch();
}
//批量更新指令;
preparedStatement.executeBatch()。
当接收到用于执行预加载SQL和运行查询SQL的http消息时,基于第二组映射关系中的第十映射关系,将用于执行预加载SQL和运行查询SQL的http消息转换为预加载SQL指令和运行查询SQL的指令构成的第一组合指令,例如PrepareAndExecuteRequest指令;
当接收到用于执行预加载SQL和执行批量更新操作的http消息时,基于第二组映射关系中的第十一映射关系,将用于执行预加载SQL和执行批量更新操作的http消息转换为预加载SQL指令和执行批量更新操作指令构成的第二组合指令,例如PrepareAndExecuteBatchRequest指令。
针对上述第(3)类转换,在一些实施例中,具体包括执行如下操作:
当接收到用于执行提交事务操作的http消息时,基于第三组映射关系中的第十二映射关系,将用于执行提交事务操作的http消息转换为提交事务操作指令,例如CommitRequest指令;
当接收到用于执行事务回滚操作的http消息时,基于第三组映射关系中的第十三映射关系,将用于执行事务回滚操作的http消息转换为事务回滚操作指令,例如RollbackRequest指令。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
上述技术方案的有益技术效果在于:
本发明实施例简化了应用程序开发的复杂度,屏蔽了不同数据库类型的差异。
本发明实施例兼容适配不同的数据库类型后,对外提供统一的编程模式(JDBC编程)和访问模式,即一致的URL和驱动。
本发明实施例支持数据过滤、数据安全功能。
实施例二
图4是本发明实施例的方法流程图。如图4所示,该方法包括如下步骤:
S110:数据库代理驱动程序从应用程序接收用于访问目标数据库的Java数据库连接JDBC应用编程接口API指令,基于JDBC API指令和http消息的转换关系映射表,将JDBCAPI指令转换为http消息,将http消息发送给数据库代理服务;
S120:数据库代理服务接收http消息,基于JDBC API指令和http消息的转换关系映射表,将http消息转换为目标数据库的驱动包的JDBC API指令,根据目标数据库的驱动包的JDBC API指令实现对目标数据库的访问。
在一些实施例中,数据库代理服务,与多种数据库连接,用于通过多个驱动包相应地提供多种数据库的适配服务。
在一些实施例中,步骤S110中数据库代理驱动程序基于JDBC API指令和http消息的转换关系映射表,将JDBC API指令转换为http消息的步骤具体包括:
当JDBC API指令是查询元数据指令时,将查询元数据指令基于转换关系映射表中预设的第一组映射关系,转换为用于查询元数据的http消息;其中,查询元数据指令用于查询目标数据库中的元数据,用于查询元数据的http消息中携带连接标识参数(connectionId),其用于唯一地标识应用程序与目标数据库之间建立的连接;或者,
当JDBC API指令是结构化查询语言SQL操作指令时,将SQL操作指令基于转换关系映射表中预设的第二组映射关系,转换为用于执行数据操作的http消息;其中,用于执行数据操作的http消息中携带连接标识参数,其用于唯一地标识应用程序与目标数据库之间建立的连接;或者,
当JDBC API指令是事务操作指令时,将事务操作指令基于转换关系映射表中预设的第三组映射关系,转换为用于执行事务操作的http消息;其中,用于执行事务操作的http消息中携带连接标识参数,其用于唯一地标识应用程序与目标数据库之间建立的连接。
具体地,JDBC API指令操作都是从打开连接开始,以关闭连接结束。打开连接操作成功后,后续的所有指令操作都要使用和打开连接指令中相同的连接标志参数。
在一些实施例中,上述方法具体包括:
当查询元数据指令是获取数据库的目录(catalog)的第一指令时,将第一指令基于第一组映射关系中的第一映射关系,转换为用于获取数据库的目录的http消息;
当查询元数据指令是获取数据库的模式(schema)的第二指令时,将二指令基于第一组映射关系中的第二映射关系,转换为用于获取数据库的模式的http消息;
当查询元数据指令是获取数据库的表(table)的第三指令时,将第三指令基于第一组映射关系中的第三映射关系,转换为用于获取数据库的表的http消息;
当查询元数据指令是获取数据库的表字段(column)的第四指令时,将第四指令基于第一组映射关系中的第四映射关系,转换为用于获取数据库的表字段的http消息。
在一些实施例中,上述方法具体包括:
当SQL操作指令是预加载SQL指令时,将预加载SQL指令基于第二组映射关系中的第五映射关系,转换为用于执行预加载SQL的http消息;
当SQL操作指令是运行查询SQL的指令时,将运行查询SQL的指令基于第二组映射关系中的第六映射关系,转换为用于运行查询SQL的http消息;其中,所述运行查询SQL的指令用于查询获取预设数量条数据记录;
当SQL操作指令是拉取数据指令(包括FetchRequest指令)时,将拉取数据指令基于第二组映射关系中的第七映射关系,转换为用于查询待查询对象区域中包括的全部数据或部分数据(至少一批数据)的http消息;其中,所述至少一批数据的条数大于所述预设数量对应的条数;其中,FetchRequest指令用于每次查询待查询对象(区域)中的预设数量条数据记录,并且重复执行多次查询直到满足预设的条件时停止执行查询;该预设的条件包括:待查询对象(区域)中的全部数据已经查询获得,或者,FetchRequest指令的重复执行次数达到预设的次数阈值。
具体地,以下详细解释拉取数据指令的使用场景。在一个示例中,假设某个表中有1000条记录,当运行查询SQL的指令时,默认会查询100条记录;当调用FetchRequest指令的时候,会查询100条记录,可以重复调用此指令,直到全部数据都已经查询过。
当SQL操作指令是关闭预处理指令时,将关闭预处理指令基于第二组映射关系中的第八映射关系,转换为用于关闭预加载SQL的http消息;
当SQL操作指令是执行批量更新操作指令时,将执行批量更新操作指令基于第二组映射关系中的第九映射关系,转换为用于执行批量更新操作的http消息;
当SQL操作指令是预加载SQL指令和运行查询SQL的指令构成的第一组合指令时,将第一组合指令基于第二组映射关系中的第十映射关系,转换为用于执行预加载SQL和运行查询SQL的http消息;
当SQL操作指令是预加载SQL指令和执行批量更新操作指令构成的第二组合指令时,将第二组合指令基于第二组映射关系中的第十一映射关系,转换为用于执行预加载SQL和执行批量更新操作的http消息。
在一些实施例中,上述方法具体包括:
当JDBC API指令是提交事务操作指令时,将提交事务操作指令基于第三组映射关系中的第十二映射关系,转换为用于执行提交事务操作的http消息;
当JDBC API指令是事务回滚操作指令时,将事务回滚操作指令基于第三组映射关系中的第十三映射关系,转换为用于执行事务回滚操作的http消息。
在一些实施例中,上述方法还包括:
数据库代理驱动程序从应用程序接收用于与目标数据库第一次建立连接的第一初始JDBC API指令,第一初始JDBC API指令中携带数据库代理服务的第一JDBC统一资源定位符URL;基于JDBC API指令和http消息的转换关系映射表中第四组映射关系包含的第十四映射关系,将第一初始JDBC API指令转换为初始http消息;根据数据库代理服务的第一JDBC URL,将初始http消息发送给数据库代理服务;
数据库代理服务接收初始http消息,从数据库代理服务的JDBC URL中获得目标数据库的访问路径;根据目标数据库的访问路径从数据库代理服务上预先存储的数据库配置信息中获取目标数据库的类型、目标数据库对应的主机IP地址、目标数据库的端口、以及目标数据库的名称;根据目标数据库的类型、目标数据库对应的主机IP地址、目标数据库的端口、以及目标数据库的名称,确定目标数据库的JDBC URL;基于第十四映射关系,将初始http消息转换为第二初始JDBC API,第二初始JDBC API中携带目标数据库的第二JDBCURL;根据第二初始JDBC API与目标数据库建立连接。
可选地,多个驱动包包括如下任意多个:Mysql驱动包、Oracle驱动包、Hive驱动包、PG驱动包。
上述技术方案的有益技术效果在于:
本发明实施例简化了应用程序开发的复杂度,屏蔽了不同数据库类型的差异。
本发明实施例兼容适配不同的数据库类型后,对外提供统一的编程模式(JDBC编程)和访问模式,即一致的URL和驱动。
图6是本发明实施例的网络架构图。如图6所示,数据库访问系统(即数据库代理网关)处于两个网络的边界,可以将受限敏感网络中的敏感数据经过数据库代理网关将数据加密、脱敏提供给外部进行访问。在一个示例中,脱敏处理可以将敏感数据例如身份证或电话号码中的部分数字以星号或叉号等符号进行代替。具体地,数据库代理服务用于将处于受限敏感网络中的目标数据库中的敏感数据进行加密处理和/或脱敏处理后,通过数据库代理驱动程序提供给外部的开放网络中的应用程序。
实施例三
本实施例提供一种数据库访问系统,其包括:
客户端设备,用于从应用程序接收用于访问目标数据库的Java数据库连接JDBC应用编程接口API指令,基于JDBC API指令和http消息的转换关系映射表,将JDBC API指令转换为http消息,将http消息发送给服务器;
服务器,用于接收上述http消息,基于JDBC API指令和http消息的转换关系映射表,将http消息转换为目标数据库的驱动包的JDBC API指令,根据目标数据库的驱动包的JDBC API指令实现对目标数据库的访问。
在一些实施例中,服务器与多种数据库连接,用于通过多个驱动包相应地提供多种数据库的服务。
在一些实施例中,客户端设备可以具体用于:
当JDBC API指令是查询元数据指令时,将查询元数据指令基于转换关系映射表中预设的第一组映射关系,转换为用于查询元数据的http消息;其中,查询元数据指令用于查询目标数据库中的元数据,用于查询元数据的http消息中携带连接标识参数,其用于唯一地标识应用程序与目标数据库之间建立的连接;或者,
当JDBC API指令是结构化查询语言SQL操作指令时,将SQL操作指令基于转换关系映射表中预设的第二组映射关系,转换为用于执行数据操作的http消息;其中,用于执行数据操作的http消息中携带连接标识参数,其用于唯一地标识应用程序与目标数据库之间建立的连接;或者,
当JDBC API指令是事务操作指令时,将事务操作指令基于转换关系映射表中预设的第三组映射关系,转换为用于执行事务操作的http消息;其中,用于执行事务操作的http消息中携带连接标识参数,其用于唯一地标识应用程序与目标数据库之间建立的连接。
在一些实施例中,客户端设备可以具体用于:
当查询元数据指令是获取数据库的目录的第一指令时,将第一指令基于第一组映射关系中的第一映射关系,转换为用于获取数据库的目录的http消息;
当查询元数据指令是获取数据库的模式的第二指令时,将二指令基于第一组映射关系中的第二映射关系,转换为用于获取数据库的模式的http消息;
当查询元数据指令是获取数据库的表的第三指令时,将第三指令基于第一组映射关系中的第三映射关系,转换为用于获取数据库的表的http消息;
当查询元数据指令是获取数据库的表字段的第四指令时,将第四指令基于第一组映射关系中的第四映射关系,转换为用于获取数据库的表字段的http消息。
在一些实施例中,客户端设备可以具体用于:
当SQL操作指令是预加载SQL指令时,将预加载SQL指令基于第二组映射关系中的第五映射关系,转换为用于执行预加载SQL的http消息;
当SQL操作指令是运行查询SQL的指令时,将运行查询SQL的指令基于第二组映射关系中的第六映射关系,转换为用于运行查询SQL的http消息;
当SQL操作指令是拉取数据指令时,将拉取数据指令基于第二组映射关系中的第七映射关系,转换为用于查询至少一批数据的http消息;
当SQL操作指令是关闭预处理指令时,将关闭预处理指令基于第二组映射关系中的第八映射关系,转换为用于关闭预加载SQL的http消息;
当SQL操作指令是执行批量更新操作指令时,将执行批量更新操作指令基于第二组映射关系中的第九映射关系,转换为用于执行批量更新操作的http消息;
当SQL操作指令是预加载SQL指令和运行查询SQL的指令构成的第一组合指令时,将第一组合指令基于第二组映射关系中的第十映射关系,转换为用于执行预加载SQL和运行查询SQL的http消息;
当SQL操作指令是预加载SQL指令和执行批量更新操作指令构成的第二组合指令时,将第二组合指令基于第二组映射关系中的第十一映射关系,转换为用于执行预加载SQL和执行批量更新操作的http消息。
在一些实施例中,客户端设备可以具体用于:
当JDBC API指令是提交事务操作指令时,将提交事务操作指令基于第三组映射关系中的第十二映射关系,转换为用于执行提交事务操作的http消息;
当JDBC API指令是事务回滚操作指令时,将事务回滚操作指令基于第三组映射关系中的第十三映射关系,转换为用于执行事务回滚操作的http消息。
在一些实施例中,客户端设备,还用于从应用程序接收用于与目标数据库第一次建立连接的第一初始JDBC API指令,其携带服务器的第一JDBC统一资源定位符URL;基于JDBC API指令和http消息的转换关系映射表中的第四组映射关系,将第一初始JDBC API指令转换为初始http消息;根据服务器的第一JDBC URL,将初始http消息发送给服务器;
服务器,还用于接收客户端设备发送的初始http消息,从第一JDBC URL中获得目标数据库的访问路径;根据目标数据库的访问路径从服务器上预先存储的数据库配置信息中获取目标数据库的类型、目标数据库的主机IP地址、目标数据库的端口、以及目标数据库的名称;根据目标数据库的类型、目标数据库的主机IP地址、目标数据库的端口、以及目标数据库的名称,确定目标数据库的JDBC URL;基于第四组映射关系,将初始http消息转换为第二初始JDBC API,第二初始JDBC API中携带目标数据库的第二初始JDBC URL;根据第二初始JDBC API与目标数据库建立连接。
实施例四
以下举例说明数据库代理与转换关系详细设计:
一、方案概述
本发明实施例通过代理服务间接地访问目标数据库,其提供一套代理JDBC API和代理JDBC URL,用户通过代理JDBC API和代理JDBC URL访问数据库的时候,将其转化为目标数据库的JDBC API和目标数据库的JDBC URL。
参阅图5,图5描述的是完整的调用链示意图。下面逐个介绍各个节点和节点之间的调用关系。
1、应用程序,即代理驱动使用者:
本产品的使用者,通常是一个应用程序,如果要使用本产品,需要使用代理驱动提供的JDBC API(指令)。
2、代理驱动
其是上述数据库代理驱动程序,用于提供对代理服务的访问入口,将JDBC API(指令)转换为http消息。
3、代理服务
其是上述数据库代理服务,持有多种目标数据库的驱动程序,可以将http消息转化为目标数据库的JDBC API(指令)。
4、目标数据库
代理对象,用户访问的真实数据库。
5、HTTP
代理驱动和代理服务之间的通信协议采用http协议。
6、JDBC API 和JDBC URL
JDBC API是应用程序通过驱动程序操作数据库的一组标准接口,或者叫标准指令。
JDBC URL是应用程序通过驱动程序跟数据库进行连接的时候,用来连接到指定远程数据库的统一资源定位符。JDBC API的指令基于JDBC URL发送到远端服务。
二、代理服务和目标数据库的配置信息集成
本发明实施例中代理服务提供的集成目标数据库的配置格式,以mysql数据库为例说明:
{
"dsType": "mysql",
"dsPath": "/ds",
"driver": "mysql数据库的驱动目录",
"host": "xx.xx.xx.xx",
"port": "3306"
}
其中,dsType:数据库类型;dsPath:数据库的访问路径;driver:数据库驱动的存储目录;host:mysql数据库的主机IP;port:mysql数据库的端口。
三、JDBC URL的转化
本发明实施例定义的数据库代理的JDBC URL格式如下:
Jdbc:dpg://{proxyIp}:{proxyPort}/{dsPath}/{xx};
ProxyIp:代理服务的主机IP;
ProxyPort:代理服务的端口;
dsPath:数据源配置的dsPath。
xx:目标数据库的数据库名字
下面以一个例子来说明下代理JDBC URL是如何转化为目标数据库的JDBC URL的:
已有目标数据库(mysql数据库):
mysql数据库的JDBC URL:
jdbc:mysql://{mysqlHost}:{mysqlPort}/;
mysql数据库在代理服务中的配置格式:
{
"dsType": "mysql",
"dsPath": "/ds",
"driver": "/home/driver/mysql",
"host": "192.168.42.100",
"port": "3306"
}
代理服务:
代理服务的IP:192.168.42.200;
代理服务的port:8765;
代理服务的JDBC URL:
Jdbc:dpg://192.168.42.200:8765/ds/xxx。
映射:
当用户访问jdbc:dpg:// 192.168.42.200:8765/ds/xxx的时候,代理服务根据请求路径/ds,找到在代理服务中的配置(mysql类型):使用配置参数中的host,port生成mysql JDBC URL:jdbc:mysql://192.168.42.100:3306,然后将/xxx原封不动地拼接到jdbc URL中,得到:jdbc:mysql://192.168.42.100:3306/xxx。
最终转换关系为:
jdbc:dpg://192.168.42.200:8765/ds/xxx;
转换为:
jdbc:mysql://192.168.42.100:3306/xxx。
下面举例说明JDBC API和 HTTP消息的转换,以打开数据库连接为例来说明:
应用程序调用代理驱动的JDBC API:
Connection connection = DriverManager.getConnection("代理服务JDBCURL",info);
代理驱动将上述JDBC API转换为Http消息:
{
"request": "openConnection",
"connectionId": "xxx",
"info": {"key":"value", ...}
}
代理服务基于http协议接收该http消息,并且将该Http消息转换为JDBC API:
Connection connection = DriverManager.getConnection("目标数据库JDBCURL",info)。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
虽然本申请提供了如实施例或流程图的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种数据库访问方法,其特征在于,所述方法包括:
数据库代理驱动程序从应用程序接收用于访问目标数据库的JDBC应用编程接口API指令,基于JDBC API指令和http消息的转换关系映射表,将所述JDBC API指令转换为http消息,将所述http消息发送给数据库代理服务;
所述数据库代理服务接收所述http消息,基于所述JDBC API指令和http消息的转换关系映射表,将所述http消息转换为目标数据库的驱动包的JDBC API指令,根据所述目标数据库的驱动包的JDBC API指令实现对所述目标数据库的访问;
其中,所述基于JDBC API指令和http消息的转换关系映射表,将所述JDBC API指令转换为http消息的步骤具体包括:
当所述JDBC API指令是查询元数据指令时,将所述查询元数据指令基于所述转换关系映射表中预设的第一组映射关系,转换为用于查询元数据的http消息;其中,所述查询元数据指令用于查询所述目标数据库中的元数据,用于查询元数据的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是结构化查询语言SQL操作指令时,将所述SQL操作指令基于所述转换关系映射表中预设的第二组映射关系,转换为用于执行数据操作的http消息;其中,所述用于执行数据操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是事务操作指令时,将所述事务操作指令基于所述转换关系映射表中预设的第三组映射关系,转换为用于执行事务操作的http消息;其中,所述用于执行事务操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接。
2.根据权利要求1所述的方法,其特征在于,
当所述查询元数据指令是用于获取数据库的目录的第一指令时,将所述第一指令基于所述第一组映射关系中的第一映射关系,转换为用于获取数据库的目录的http消息;
当所述查询元数据指令是用于获取数据库的模式的第二指令时,将所述二指令基于所述第一组映射关系中的第二映射关系,转换为用于获取数据库的模式的http消息;
当所述查询元数据指令是用于获取数据库的表的第三指令时,将所述第三指令基于所述第一组映射关系中的第三映射关系,转换为用于获取数据库的表的http消息;
当所述查询元数据指令是用于获取数据库的表字段的第四指令时,将所述第四指令基于所述第一组映射关系中的第四映射关系,转换为用于获取数据库的表字段的http消息。
3.根据权利要求1所述的方法,其特征在于,
当所述SQL操作指令是预加载SQL指令时,将所述预加载SQL指令基于所述第二组映射关系中的第五映射关系,转换为用于执行预加载SQL的http消息;
当所述SQL操作指令是运行查询SQL的指令时,将所述运行查询SQL的指令基于所述第二组映射关系中的第六映射关系,转换为用于运行查询SQL的http消息;其中,所述运行查询SQL的指令用于查询获取预设数量条数据记录;
当所述SQL操作指令是拉取数据指令时,将所述拉取数据指令基于所述第二组映射关系中的第七映射关系,转换为用于查询至少一批数据的http消息;其中,所述至少一批数据的条数大于所述预设数量对应的条数;
当所述SQL操作指令是关闭预处理指令时,将所述关闭预处理指令基于所述第二组映射关系中的第八映射关系,转换为用于关闭预加载SQL的http消息;
当所述SQL操作指令是执行批量更新操作指令时,将所述执行批量更新操作指令基于所述第二组映射关系中的第九映射关系,转换为用于执行批量更新操作的http消息;
当所述SQL操作指令是预加载SQL指令和运行查询SQL的指令构成的第一组合指令时,将所述第一组合指令基于所述第二组映射关系中的第十映射关系,转换为用于执行预加载SQL和运行查询SQL的http消息;
当所述SQL操作指令是预加载SQL指令和执行批量更新操作指令构成的第二组合指令时,将所述第二组合指令基于所述第二组映射关系中的第十一映射关系,转换为用于执行预加载SQL和执行批量更新操作的http消息。
4.根据权利要求1所述的方法,其特征在于,
当所述JDBC API指令是提交事务操作指令时,将所述提交事务操作指令基于所述第三组映射关系中的第十二映射关系,转换为用于执行提交事务操作的http消息;
当所述JDBC API指令是事务回滚操作指令时,将所述事务回滚操作指令基于所述第三组映射关系中的第十三映射关系,转换为用于执行事务回滚操作的http消息。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
数据库代理驱动程序从应用程序接收用于与目标数据库第一次建立连接的第一初始JDBC API指令,所述第一初始JDBC API指令中携带数据库代理服务的第一JDBC统一资源定位符URL;基于JDBC API指令和http消息的转换关系映射表中第四组映射关系包含的第十四映射关系,将所述第一初始JDBC API指令转换为初始http消息;根据所述数据库代理服务的第一JDBC URL,将所述初始http消息发送给所述数据库代理服务;
所述数据库代理服务接收所述初始http消息,从所述数据库代理服务的JDBC URL中获得目标数据库的访问路径;根据所述目标数据库的访问路径从所述数据库代理服务上预先存储的数据库配置信息中获取所述目标数据库的类型、目标数据库对应的主机IP地址、目标数据库的端口、以及目标数据库的名称;根据所述目标数据库的类型、目标数据库对应的主机IP地址、目标数据库的端口、以及目标数据库的名称,确定所述目标数据库的JDBCURL;基于所述第十四映射关系,将所述初始http消息转换为第二初始JDBC API,所述第二初始JDBC API中携带所述目标数据库的第二JDBC URL;根据所述第二初始JDBC API与所述目标数据库建立连接。
6.一种数据库访问系统,其特征在于,所述系统包括:数据库代理驱动程序和数据库代理服务;
所述数据库代理驱动程序,用于接入应用程序,使所述应用程序访问所述数据库代理服务接入的多种数据库;所述数据库代理驱动程序采用数据库代理JDBC驱动程序,其包括:收发模块,用于从应用程序接收用于访问目标数据库的JDBC应用编程接口API指令;第一转换模块,用于基于JDBC API指令和http消息的转换关系映射表,将所述JDBC API指令转换为http消息;http客户端,用于将所述http消息发送给所述数据库代理服务;
所述数据库代理服务,其包括:http服务端,用于接收所述http客户端发送的所述http消息;第二转换模块,用于基于所述JDBC API指令和http消息的转换关系映射表,将所述http消息转换为目标数据库的驱动包的JDBC API指令;多个驱动包,用于一一对应地适配多种数据库,其中,所述目标数据库的驱动包用于根据所述JDBC API指令实现对所述目标数据库的访问;
其中,所述第一转换模块,具体用于:
当所述JDBC API指令是查询元数据指令时,将所述查询元数据指令基于所述转换关系映射表中预设的第一组映射关系,转换为用于查询元数据的http消息;其中,所述查询元数据指令用于查询所述目标数据库中的元数据,用于查询元数据的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是结构化查询语言SQL操作指令时,将所述SQL操作指令基于所述转换关系映射表中预设的第二组映射关系,转换为用于执行数据操作的http消息;其中,所述用于执行数据操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是事务操作指令时,将所述事务操作指令基于所述转换关系映射表中预设的第三组映射关系,转换为用于执行事务操作的http消息;其中,所述用于执行事务操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接。
7.一种数据库访问系统,其特征在于,所述系统包括:
客户端设备,用于从应用程序接收用于访问目标数据库的JDBC应用编程接口API指令,基于JDBC API指令和http消息的转换关系映射表,将所述JDBC API指令转换为http消息,将所述http消息发送给服务器;
服务器,用于接收所述http消息,基于所述JDBC API指令和http消息的转换关系映射表,将所述http消息转换为目标数据库的驱动包的JDBC API指令,根据所述目标数据库的驱动包的JDBC API指令实现对所述目标数据库的访问;
所述客户端设备具体用于:
当所述JDBC API指令是查询元数据指令时,将所述查询元数据指令基于所述转换关系映射表中预设的第一组映射关系,转换为用于查询元数据的http消息;其中,所述查询元数据指令用于查询所述目标数据库中的元数据,用于查询元数据的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是结构化查询语言SQL操作指令时,将所述SQL操作指令基于所述转换关系映射表中预设的第二组映射关系,转换为用于执行数据操作的http消息;其中,所述用于执行数据操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接;或者,
当所述JDBC API指令是事务操作指令时,将所述事务操作指令基于所述转换关系映射表中预设的第三组映射关系,转换为用于执行事务操作的http消息;其中,所述用于执行事务操作的http消息中携带连接标识参数,其用于唯一地标识所述应用程序与目标数据库之间建立的连接。
8.根据权利要求7所述的系统,其特征在于,所述客户端设备具体用于:
当所述查询元数据指令是用于获取数据库的目录的第一指令时,将所述第一指令基于所述第一组映射关系中的第一映射关系,转换为用于获取数据库的目录的http消息;
当所述查询元数据指令是用于获取数据库的模式的第二指令时,将所述二指令基于所述第一组映射关系中的第二映射关系,转换为用于获取数据库的模式的http消息;
当所述查询元数据指令是用于获取数据库的表的第三指令时,将所述第三指令基于所述第一组映射关系中的第三映射关系,转换为用于获取数据库的表的http消息;
当所述查询元数据指令是用于获取数据库的表字段的第四指令时,将所述第四指令基于所述第一组映射关系中的第四映射关系,转换为用于获取数据库的表字段的http消息。
9.根据权利要求7所述的系统,其特征在于,所述客户端设备具体用于:
当所述SQL操作指令是预加载SQL指令时,将所述预加载SQL指令基于所述第二组映射关系中的第五映射关系,转换为用于执行预加载SQL的http消息;
当所述SQL操作指令是运行查询SQL的指令时,将所述运行查询SQL的指令基于所述第二组映射关系中的第六映射关系,转换为用于运行查询SQL的http消息;其中,所述运行查询SQL的指令用于查询获取预设数量条数据记录;
当所述SQL操作指令是拉取数据指令时,将所述拉取数据指令基于所述第二组映射关系中的第七映射关系,转换为用于查询至少一批数据的http消息;其中,所述至少一批数据的条数大于所述预设数量对应的条数;
当所述SQL操作指令是关闭预处理指令时,将所述关闭预处理指令基于所述第二组映射关系中的第八映射关系,转换为用于关闭预加载SQL的http消息;
当所述SQL操作指令是执行批量更新操作指令时,将所述执行批量更新操作指令基于所述第二组映射关系中的第九映射关系,转换为用于执行批量更新操作的http消息;
当所述SQL操作指令是预加载SQL指令和运行查询SQL的指令构成的第一组合指令时,将所述第一组合指令基于所述第二组映射关系中的第十映射关系,转换为用于执行预加载SQL和运行查询SQL的http消息;
当所述SQL操作指令是预加载SQL指令和执行批量更新操作指令构成的第二组合指令时,将所述第二组合指令基于所述第二组映射关系中的第十一映射关系,转换为用于执行预加载SQL和执行批量更新操作的http消息。
10.根据权利要求7所述的系统,其特征在于,
所述客户端设备,还用于从应用程序接收用于与目标数据库第一次建立连接的第一初始JDBC API指令,其携带所述服务器的第一JDBC统一资源定位符URL;基于JDBC API指令和http消息的转换关系映射表中的第四组映射关系,将所述第一初始JDBC API指令转换为初始http消息;根据所述服务器的第一JDBC URL,将所述初始http消息发送给所述服务器;
所述服务器,还用于接收所述客户端设备发送的所述初始http消息,从所述第一JDBCURL中获得目标数据库的访问路径;根据所述目标数据库的访问路径从所述服务器上预先存储的数据库配置信息中获取所述目标数据库的类型、目标数据库的主机IP地址、目标数据库的端口、以及目标数据库的名称;根据所述目标数据库的类型、目标数据库的主机IP地址、目标数据库的端口、以及目标数据库的名称,确定所述目标数据库的JDBC URL;基于所述第四组映射关系,将所述初始http消息转换为第二初始JDBC API,所述第二初始JDBCAPI中携带所述目标数据库的第二初始JDBC URL;根据所述第二初始JDBC API与所述目标数据库建立连接。
CN202111473193.9A 2021-12-06 2021-12-06 一种数据库访问方法和系统 Active CN113886481B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111473193.9A CN113886481B (zh) 2021-12-06 2021-12-06 一种数据库访问方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111473193.9A CN113886481B (zh) 2021-12-06 2021-12-06 一种数据库访问方法和系统

Publications (2)

Publication Number Publication Date
CN113886481A CN113886481A (zh) 2022-01-04
CN113886481B true CN113886481B (zh) 2022-03-04

Family

ID=79016348

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111473193.9A Active CN113886481B (zh) 2021-12-06 2021-12-06 一种数据库访问方法和系统

Country Status (1)

Country Link
CN (1) CN113886481B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013036871A1 (en) * 2011-09-09 2013-03-14 Oracle International Corporation Idempotence for database transactions
CN106126540A (zh) * 2016-06-15 2016-11-16 中国传媒大学 数据库访问系统及其访问方法
CN110489465A (zh) * 2018-09-28 2019-11-22 北京数聚鑫云信息技术有限公司 一种数据库访问方法和装置
CN111797243A (zh) * 2020-07-03 2020-10-20 中国烟草总公司湖南省公司 知识图谱数据系统构建方法、系统、终端及可读存储介质
CN111813798A (zh) * 2020-07-10 2020-10-23 中国医学科学院医学信息研究所 基于r2rml标准的映射方法、装置、设备及存储介质
CN112286957A (zh) * 2020-11-06 2021-01-29 广州易幻网络科技有限公司 基于结构化查询语言的bi系统的api应用方法及系统

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7996416B2 (en) * 2007-08-31 2011-08-09 Red Hat, Inc. Parameter type prediction in object relational mapping
CN102143200B (zh) * 2010-10-20 2013-09-11 华为技术有限公司 一种soap api转换为rest api的公共消息头承载方法及装置
EP3401820B1 (en) * 2017-05-10 2019-12-18 Siemens Aktiengesellschaft Apparatus and method for providing a secure database access
CN109992596A (zh) * 2019-02-25 2019-07-09 新智云数据服务有限公司 数据处理方法及装置
CN111240660B (zh) * 2020-01-06 2022-03-11 北京邮电大学 基于json树的可视化api组合方法及系统
CN111625585B (zh) * 2020-05-22 2021-08-31 中科驭数(北京)科技有限公司 硬件加速数据库的访问方法、装置、主机及存储介质
CN113206836A (zh) * 2021-04-12 2021-08-03 河海大学 一种工业互联网中api网关实现协议转换的方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013036871A1 (en) * 2011-09-09 2013-03-14 Oracle International Corporation Idempotence for database transactions
CN106126540A (zh) * 2016-06-15 2016-11-16 中国传媒大学 数据库访问系统及其访问方法
CN110489465A (zh) * 2018-09-28 2019-11-22 北京数聚鑫云信息技术有限公司 一种数据库访问方法和装置
CN111797243A (zh) * 2020-07-03 2020-10-20 中国烟草总公司湖南省公司 知识图谱数据系统构建方法、系统、终端及可读存储介质
CN111813798A (zh) * 2020-07-10 2020-10-23 中国医学科学院医学信息研究所 基于r2rml标准的映射方法、装置、设备及存储介质
CN112286957A (zh) * 2020-11-06 2021-01-29 广州易幻网络科技有限公司 基于结构化查询语言的bi系统的api应用方法及系统

Also Published As

Publication number Publication date
CN113886481A (zh) 2022-01-04

Similar Documents

Publication Publication Date Title
WO2019210758A1 (zh) 数据保护方法、装置及存储介质
US7383552B2 (en) Object manager for common information model
EP0972258B1 (en) Java-to-database connectivity server
US7970823B2 (en) System for sharing data objects among applications
US8321450B2 (en) Standardized database connectivity support for an event processing server in an embedded context
US7546335B2 (en) System and method for a data protocol layer and the transfer of data objects using the data protocol layer
KR101004576B1 (ko) 연쇄 발견 웹 서비스
US20080208806A1 (en) Techniques for a web services data access layer
US20180084085A1 (en) Cross platform device virtualization for an iot system
US20080301143A1 (en) Automatic Update System and Method for Using a Meta Mib
KR20110093876A (ko) 표적 동작 객체를 찾아내기 위한 장치 관리 서버, 클라이언트 및 방법
CN108345691B (zh) 数据源通用处理框架构建方法、数据源处理方法及装置
WO2019079799A1 (en) SYSTEM AND METHOD FOR DATA MANAGEMENT
CN100440803C (zh) 模型化处理网格信息的方法
US20030135648A1 (en) CIM to SNMP data mapper
CN113886481B (zh) 一种数据库访问方法和系统
CN116881040A (zh) 一种业务操作处理方法、装置、电子装置和存储介质
CN114915533B (zh) 一种基于平台的北向接口实现方法和架构
US20030177214A1 (en) Dynamic SNMP network device
CN114793191A (zh) 一种基于领域模型的物联网集成系统及方法
WO2016206405A1 (zh) 一种数据库访问方法及装置
CN115048437A (zh) 一种基于核电Paas平台的数据服务方法及系统
CN105721507A (zh) 一种基于jdbc服务-长报文的数据共享服务平台基础支撑系统及方法
US7349900B1 (en) Unified high-performance database connectivity system and method
CN114816579B (zh) 一种基于工业互联网平台的SaaS化工业APP接入方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant