CN106933869B - 一种操作数据库的方法和装置 - Google Patents
一种操作数据库的方法和装置 Download PDFInfo
- Publication number
- CN106933869B CN106933869B CN201511024638.XA CN201511024638A CN106933869B CN 106933869 B CN106933869 B CN 106933869B CN 201511024638 A CN201511024638 A CN 201511024638A CN 106933869 B CN106933869 B CN 106933869B
- Authority
- CN
- China
- Prior art keywords
- database
- syntax tree
- operating
- statement
- tree object
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种操作数据库的方法和装置,能够使程序员采用一种数据库的程序语言访问和操作另一种数据库,避免了对数据库产生误操作,造成数据丢失等问题,同时也降低了程序员的学习成本。本发明的操作数据库的方法包括:根据预设的词法范式生成第一数据库的操作语句的解析器;第二数据库适配器接收调用者输入的第一数据库的操作语句;第二数据库适配器调用所述解析器对所述第一数据库的操作语句进行解析,生成对应于第一数据库操作语句的语法树对象;第二数据库适配器调用第二数据库转换器将所述语法树对象转换为操作第二数据库的操作指令,并根据该操作指令对所述第二数据库进行操作,并将接收到的第二数据库的操作结果返回调用者。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种操作数据库的方法和装置。
背景技术
目前,MongoDB为IT行业非常流行的一种非关系型数据库NoSql。随着MongoDB的流行,有越来越多的项目中采用MongoDB来做为数据存储引擎。
由于访问和操作传统的关系型数据库所使用的是SQL语言,并且已被使用多年,因而被绝大多数程序员所熟悉。但对MongoDB的访问和操作需要使用专用的应用程序编程接口API,与传统的通过SQL来操作数据的方式并不相同,因而程序员需要重新学习MongoDB的API,不仅增加了NoSQL数据库的学习成本,并程序员有可能因为不熟悉MongoDB的API对API误用造成数据库中数据丢失等问题,进而影响数据库的性能,并且在需要迁移数据库中的数据时,也避免了程序代码的修改。
发明内容
有鉴于此,本发明提供一种操作数据库的方法和装置,能够使程序员采用一种数据库的程序语言访问和操作另一种数据库,避免了由于对程序语言的不熟悉而对数据库产生误操作,造成数据丢失等问题,同时也降低了程序员的学习成本。
为实现上述目的,根据本发明的一个方面,提供了一种操作数据库的方法。
本发明的操作数据库的方法包括:根据预设的词法范式生成第一数据库的操作语句的解析器;第二数据库适配器接收调用者输入的第一数据库的操作语句;第二数据库适配器调用所述解析器对所述第一数据库的操作语句进行解析,生成对应于第一数据库操作语句的语法树对象;第二数据库适配器调用第二数据库转换器将所述语法树对象转换为操作第二数据库的操作指令,并根据该操作指令对所述第二数据库进行操作,并将接收到的第二数据库的操作结果返回调用者。
可选地,根据预设的词法范式生成第一数据库的操作语句的解析器的步骤之前包括:保存JavaCC的词法范式文件:.jj文件;并且根据预设的词法范式生成第一数据库的操作语句的解析器的步骤包括:调用JavaCC根据.jj文件中记载的词法范式生成解析器。
可选地,第二数据库适配器调用第二数据库转换器将所述语法树对象转换为操作第二数据库的操作指令的步骤包括:第二数据库适配器根据所述语法树对象的功能,构建对应于该功能的对象;所述对象分别获取所述语法树对象的子语句,并调用第二数据库转换器将语法树对象的子语句转换为操作第二数据库的操作指令。
可选地,第一数据库包括sql数据库;所述第二数据库包括以下一种或几种:Mongodb数据库、Cassandra数据库、CouchDB数据库、以及Hbase数据库。
可选地,所述操作包括查找、增加、修改以及删除。
根据本发明的另一个方面,提供了一种操作数据库的装置。
本发明的操作数据库的装置包括:解析器生成模块、第二数据库适配器、以及第二数据库转换器;其中:所述解析器生成模块用于根据预设的词法范式生成第一数据库的操作语句的解析器;所述第二数据库适配器用于接收调用者输入的第一数据库的操作语句,然后调用所述解析器对所述第一数据库的操作语句进行解析,生成对应于第一数据库操作语句的语法树对象,再调用第二数据库转换器将所述语法树对象转换为操作第二数据库的操作指令,并根据该操作指令对所述第二数据库进行操作,并将接收到的第二数据库的操作结果返回调用者;所述第二数据库转换器用于将所述语法树对象转换为操作第二数据库的操作指令。
可选地,还包括保存模块,用于保存JavaCC的词法范式文件:.jj文件;并且所述解析器生成模块还用于调用JavaCC根据.jj文件中记载的词法范式生成解析器。
可选地,第二数据库适配器还用于根据所述语法树对象的功能,构建对应于该功能的对象;所述对象分别获取所述语法树对象的子语句,并调用第二数据库转换器将语法树对象的子语句转换为操作第二数据库的操作指令。
可选地,第一数据库包括sql数据库;所述第二数据库包括以下一种或几种:Mongodb数据库、Cassandra数据库、CouchDB数据库、以及Hbase数据库。
可选地,所述操作包括查找、增加、修改以及删除。
根据本发明实施例的再一方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明所提供的操作数据库的方法。
根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明所提供的操作数据库的方法。
根据本发明的技术方案,由于能够将一种数据库的操作语句转换成另一种数据库的操作指令,因而,能够使程序员采用一种数据库的程序语言访问和操作另一种数据库,不仅避免了由于对程序语言的不熟悉而对数据库产生误操作,降低了造成数据损坏甚至丢失的概率,同时也降低了程序员的学习成本。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的一种操作数据库的方法的示意图;
图2是根据本发明实施例的一种操作数据库的装置的示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的一种操作数据库的方法的示意图。如图1所示,以将SQL数据库的操作语句转换为MongoDB数据库的操作指令为例,即SQL数据库为第一数据库,MongoDB数据库为第二数据库,本发明实施例的技术方案主要包括步骤S10至S12。
步骤S10:MongoDB适配器接收到调用者输入的SQL数据库的操作语句。在该步骤中,操作语句是指SQL语句字符串。
步骤S10之前,根据预设的词法范式生成SQL数据库的操作语句的解析器,生成解析器既可以使用现有的词法分析工具,也可以使用新开发的词法分析工具。以使用JavaCC词法分析工具为例:首先,编写JavaCC的词法范式文件:.jj文件;然后,JavaCC词法分析工具根据.jj文件中描述的词法范式,生成相应的词法解析代码(即SQL解析器)。
步骤S11:MongoDB适配器调用SQL解析器,解析调用者输入的SQL语句字符串,生成与SQL语句字符串等价的SQL语法树对象。在该步骤中,使用生成的SQL解析器对输入的SQL语句进行词法分析,MongoDB适配器调用SQL解析器对SQL语句字符串进行解析,从而得到与输入的SQL语句字符串所对应的SQL语法树对象。
以Select语句为例,当向SQL解析器输入Select语句,解析器将Select语句解析成由以下几部分组成的语法树对象:
Select://Select对象代表了整个select语句,是整个语法树的根节点;
|--distinct//distinct子句,sql语法中的关键字;
|--<select Items>//要查询的字段;
|--From:<table source>//要查询的表;
|--Where:<expression>//过滤条件;
|--Group By:<group by list>//分组条件;
|--Having:<having condition>//having子句,用于分组时使用聚合函数做查询条件;
|--Order by:order by list//排序字段及排序类型;
后继的语法转换器根据以上的解析结果进行语法转换。
步骤S12:MongoDB适配器调用MongoDB转换器,将SQL语法树对象转换为MongoDB数据库操作指令,所有组成部分转换完成后,在对应的MongoDB数据库执行这些操作指令,并将接收到的操作结果返回给用户。
以将Select语句转换为MongoDB数据库的find操作指令为例:
SQL语句“Select*from myTable where name=‘张三’”经过SQL解析器的解析,在内存中生成以下对象:
Select//Select对象代表了整个select语句,将被转换为MongoDB数据库的find操作;
|---selectItems:[*]//要选择的字段;
|---formItem:myTable//要查询的表名,将转换为MongoDB数据库的collection名称;
|---where:{left:’name’,right=’张三’}//查询的过滤条件,将转换为MongoDB数据库的Query对象,通过Select对象的selectItems属性得到Select语句要查询的字段,通过formItem得到要查询的表,通过where属性得到查询的过滤条件。将where过滤条件转换为MongoDB数据库查询时的Query对象,formItem转换为MongoDB数据库的collectionName,然后使用MongoTemplate,执行find操作:mongoTemplate.find(Query,collectionName,Type),即可查询mongodb中的数据。
转换示例:
转换前SQL语法树:select selectItems:[x,y,z]formItem:colls where:{x:3,y:’foo’}
转换后的MongoDB数据库操作语句:db.colls.find({x:3,y:“foo”}),因此,使用转换后的MongoDB数据库的操作语句操作MongoDB数据库。
下面,以将sql语句转换为MongoDB的查询操作为例对本发明的技术方案进行详细说明:
1、MongoSQLAdapter(适配器)在接收到调用者输入的SQL语句字符串后,调用CCJSqlParserManager(即解析器)组件对SQL语句字符串进行解析;
2、CCJSqlParserManager解析完SQL语句字符串后,将SQL语法树对象返回给MongoSQLAdapter;
3、MongoSQLAdapter再调用具体的StatementAdapter对语法树对象进行分解,传给StatementAdapter的SQL语法树对象,会根据SQL语句的功能,构建不同的增删改查对象,如查询SQL构建Select对象,Insert SQL会构建Insert对象;
4、如果是查询类SQL语句,StatementAdapter调用Select对象获取Where子语句,然后在调用MongoExpressionTransformer对象去把SQL语法树的Where子语句转换成MongoDB对应的查询语句,同时去新建一个Query查询对象,把MongoDB子查询语句设置到Query对象中;
5、StatementAdapter调用Select对象获取From子语句,以获得该SQL操作的表对象;StatementAdapter调用Select对象获取OrderBy子语句,通过调用MongoExpressionTransformer获取OrderByTransformer,再调用OrderByTransformer把SQL里的OrderBy子语句转换成MongoDB的排序子语句,并MongoDB的排序子语句设置到Query对象中;
6、StatementAdapter调用Select对象获取分页子语句(如:MySQL的分页关键字limit),并把分页子语句转换成MongoDB的分页子语句,并MongoDB的排序子语句设置到Query对象中;
7、StatementAdapter把Query对象和表名传给MongoTemplate(Mongo操作的模板),执行对应的MongoDB查询操作,返回查询的数据,完成数据查询请求。
以上为将sql语句字符串转换为MongoDB数据库操作指令的例子,需要说明的是,第二数据库也可以为:Cassandra数据库、CouchDB数据库、以及Hbase数据库,只需要创建不同数据库所对应的适配器和转换器即可,SQL解析器可以通用。
如图2是根据本发明实施例的一种操作数据库的装置的示意图。如图2所示,本发明实施例的操作数据库的装置20主要包括解析器生成模块21、第二数据库适配器22、以及第二数据库转换器23;所述解析器生成模块21用于根据预设的词法范式生成第一数据库的操作语句的解析器;所述第二数据库适配器22用于接收调用者输入的第一数据库的操作语句,然后调用所述解析器对所述第一数据库的操作语句进行解析,生成对应于第一数据库操作语句的语法树对象,再调用第二数据库转换器23将所述语法树对象转换为操作第二数据库的操作指令,并根据该操作指令对所述第二数据库进行操作,并将接收到的第二数据库的操作结果返回调用者;所述第二数据库转换器23用于将所述语法树对象转换为操作第二数据库的操作指令。
本发明实施例的操作数据库的装置20还可包括保存模块(图中未示出),用于保存JavaCC的词法范式文件:.jj文件;并且所述解析器生成模块21还可用于调用JavaCC根据.jj文件中记载的词法范式生成解析器。
本发明实施例的操作数据库的装置20的第二数据库适配器22还可用于根据所述语法树对象的功能,构建对应于该功能的对象;所述对象分别获取所述语法树对象的子语句,并调用第二数据库转换器23将语法树对象的子语句转换为操作第二数据库的操作指令。
根据本发明实施的技术方案,由于能够将一种数据库的操作语句转换成另一种数据库的操作指令,因而,能够使程序员采用一种数据库的程序语言访问和操作另一种数据库,不仅避免了由于对程序语言的不熟悉而对数据库产生误操作,降低了造成数据损坏甚至丢失的概率,同时也降低了程序员的学习成本。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (12)
1.一种操作数据库的方法,其特征在于,包括:
根据预设的词法范式生成第一数据库的操作语句的解析器;
第二数据库适配器接收调用者输入的第一数据库的操作语句;
第二数据库适配器调用所述解析器对所述第一数据库的操作语句进行解析,生成对应于第一数据库操作语句的语法树对象;
第二数据库适配器调用第二数据库转换器将所述语法树对象转换为操作第二数据库的操作指令,并根据该操作指令对所述第二数据库进行操作,并将接收到的第二数据库的操作结果返回调用者。
2.根据权利要求1所述的方法,其特征在于,根据预设的词法范式生成第一数据库的操作语句的解析器的步骤之前包括:保存JavaCC的词法范式文件:.jj文件;
并且根据预设的词法范式生成第一数据库的操作语句的解析器的步骤包括:调用JavaCC根据.jj文件中记载的词法范式生成解析器。
3.根据权利要求1所述的方法,其特征在于,第二数据库适配器调用第二数据库转换器将所述语法树对象转换为操作第二数据库的操作指令的步骤包括:
第二数据库适配器根据所述语法树对象的功能,构建对应于该功能的对象;
所述对象分别获取所述语法树对象的子语句,并调用第二数据库转换器将语法树对象的子语句转换为操作第二数据库的操作指令。
4.根据权利要求1至3中任一项所述的方法,其特征在于,第一数据库包括sql数据库;所述第二数据库包括以下一种或几种:Mongodb数据库、Cassandra数据库、CouchDB数据库、以及Hbase数据库。
5.根据权利要求1所述的方法,其特征在于,所述操作包括查找、增加、修改以及删除。
6.一种操作数据库的装置,其特征在于,包括:解析器生成模块、第二数据库适配器、以及第二数据库转换器;其中:
所述解析器生成模块用于根据预设的词法范式生成第一数据库的操作语句的解析器;
所述第二数据库适配器用于接收调用者输入的第一数据库的操作语句,然后调用所述解析器对所述第一数据库的操作语句进行解析,生成对应于第一数据库操作语句的语法树对象,再调用第二数据库转换器将所述语法树对象转换为操作第二数据库的操作指令,并根据该操作指令对所述第二数据库进行操作,并将接收到的第二数据库的操作结果返回调用者;
所述第二数据库转换器用于将所述语法树对象转换为操作第二数据库的操作指令。
7.根据权利要求6所述的装置,其特征在于,还包括保存模块,用于保存JavaCC的词法范式文件:.jj文件;
并且所述解析器生成模块还用于调用JavaCC根据.jj文件中记载的词法范式生成解析器。
8.根据权利要求6所述的装置,其特征在于,第二数据库适配器还用于根据所述语法树对象的功能,构建对应于该功能的对象;所述对象分别获取所述语法树对象的子语句,并调用第二数据库转换器将语法树对象的子语句转换为操作第二数据库的操作指令。
9.根据权利要求6至8中任一项所述的装置,其特征在于,第一数据库包括sql数据库;所述第二数据库包括以下一种或几种:Mongodb数据库、Cassandra数据库、CouchDB数据库、以及Hbase数据库。
10.根据权利要求6所述的装置,其特征在于,所述操作包括查找、增加、修改以及删除。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511024638.XA CN106933869B (zh) | 2015-12-30 | 2015-12-30 | 一种操作数据库的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511024638.XA CN106933869B (zh) | 2015-12-30 | 2015-12-30 | 一种操作数据库的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106933869A CN106933869A (zh) | 2017-07-07 |
CN106933869B true CN106933869B (zh) | 2020-09-01 |
Family
ID=59442589
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511024638.XA Active CN106933869B (zh) | 2015-12-30 | 2015-12-30 | 一种操作数据库的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106933869B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388646A (zh) * | 2018-02-28 | 2018-08-10 | 弘成科技发展有限公司 | 一种能够保证sql完整性且能动态变动的方法 |
CN109871408B (zh) * | 2019-03-05 | 2023-07-14 | 深圳市迅雷网络技术有限公司 | 一种多类型数据库适配方法、装置、电子设备及存储介质 |
US11256709B2 (en) | 2019-08-15 | 2022-02-22 | Clinicomp International, Inc. | Method and system for adapting programs for interoperability and adapters therefor |
CN113448942B (zh) * | 2020-03-27 | 2022-07-22 | 阿里巴巴集团控股有限公司 | 数据库访问方法、装置、设备及存储介质 |
CN112905567B (zh) * | 2021-03-23 | 2023-04-07 | 杭州沃趣科技股份有限公司 | 基于网络协议转换的数据库更换方法、装置、系统及介质 |
CN116775680A (zh) * | 2023-05-31 | 2023-09-19 | 北京龙软科技股份有限公司 | 一种基于SQL操作MongoDB数据库的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102982075A (zh) * | 2012-10-30 | 2013-03-20 | 北京京东世纪贸易有限公司 | 支持访问异构数据源的系统和方法 |
CN103761265A (zh) * | 2014-01-02 | 2014-04-30 | 上海起维信息科技有限公司 | 一种基于NoSQL的医疗信息系统数据库实现方法 |
-
2015
- 2015-12-30 CN CN201511024638.XA patent/CN106933869B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102982075A (zh) * | 2012-10-30 | 2013-03-20 | 北京京东世纪贸易有限公司 | 支持访问异构数据源的系统和方法 |
CN103761265A (zh) * | 2014-01-02 | 2014-04-30 | 上海起维信息科技有限公司 | 一种基于NoSQL的医疗信息系统数据库实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106933869A (zh) | 2017-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106933869B (zh) | 一种操作数据库的方法和装置 | |
CN106934062B (zh) | 一种查询elasticsearch的实现方法及系统 | |
CN109582647B (zh) | 一种面向非结构化证据文件的分析方法及系统 | |
US8977626B2 (en) | Indexing and searching a data collection | |
CN103699620A (zh) | 面向对象中利用orm框架实现数据库操作的方法及系统 | |
US20110161328A1 (en) | Spatial data cartridge for event processing systems | |
WO2021139426A1 (zh) | 查询数据库数据的方法、装置、设备和存储介质 | |
CN114357276A (zh) | 数据查询方法、装置、电子设备以及存储介质 | |
US9268558B2 (en) | Searching source code | |
CN111324628A (zh) | 一种基于Spark SQL的统一SQL查询方法 | |
CN112765209A (zh) | 一种数据库间的sql语句语法迁移方法及系统 | |
CN112235311A (zh) | Ovsdb客户端代码自动生成方法、系统、设备及介质 | |
CN111666372B (zh) | 解析查询词query的方法、装置、电子设备和可读存储介质 | |
Douglas et al. | LittleD: a SQL database for sensor nodes and embedded applications | |
CN113468204A (zh) | 一种数据查询方法、装置、设备、介质 | |
CN113467785B (zh) | 一种拟态数据库的sql转译方法和系统 | |
CN107025265B (zh) | 搜索方法、装置、系统、以及命令转换器的生成方法 | |
CN113515564A (zh) | 基于j2ee的数据访问方法、装置、设备及存储介质 | |
CN117112608A (zh) | 一种基于Antlr4的数据库语句转换方法及装置 | |
US20180246931A1 (en) | Sqlscript compilation tracing system | |
CN103902651A (zh) | 一种基于MongoDB的云端代码查询方法与装置 | |
CN108509187B (zh) | 一种自动生成软件平台mib功能代码的方法及系统 | |
WO2021259290A1 (zh) | 存储过程转换方法、装置、设备和存储介质 | |
CN113608748B (zh) | C语言转换Java语言的数据处理方法、装置及设备 | |
CN114925142A (zh) | 一种orm框架的多类型数据库兼容方法、装置、设备及介质 |
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 |