直接查询结构化数据的方法及装置.pdf

上传人:62****3 文档编号:9193097 上传时间:2021-05-10 格式:PDF 页数:29 大小:1.24MB
收藏 版权申诉 举报 下载
直接查询结构化数据的方法及装置.pdf_第1页
第1页 / 共29页
直接查询结构化数据的方法及装置.pdf_第2页
第2页 / 共29页
直接查询结构化数据的方法及装置.pdf_第3页
第3页 / 共29页
文档描述:

《直接查询结构化数据的方法及装置.pdf》由会员分享,可在线阅读,更多相关《直接查询结构化数据的方法及装置.pdf(29页完成版)》请在专利查询网上搜索。

1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 202010075999.1 (22)申请日 2020.01.22 (71)申请人 北京飞漫软件技术有限公司 地址 100089 北京市海淀区苏州街1号3层 009 (72)发明人 魏永明耿岳薛淑明 (74)专利代理机构 北京三聚阳光知识产权代理 有限公司 11250 代理人 张琳琳 (51)Int.Cl. G06F 16/2455(2019.01) (54)发明名称 一种直接查询结构化数据的方法及装置 (57)摘要 本发明公开了一种直接查询结构化数据的 方法及装置, 该方法包括。

2、如下步骤: 根据用户代 理发送的数据查询请求进行合法性检查, 生成有 效数据查询语句; 根据有效数据查询语句进行执 行, 得到查询结果; 根据查询结果写入套接字, 得 到所述查询结果的响应输出。 本发明实施例提供 的直接查询结构化数据的方法及装置, 通过引入 新的lsql、 rsql、 rsqls图式, 为HTML网页提供了 直接访问本地或者远程数据库并执行SQL语句的 方法, 降低了编写前端脚本程序或者后台服务器 程序的代码量。 因此, 通过实施本发明, 解决了现 有技术中操作结构化数据时需要编写额外的脚 本程序, 且占用内存较大的技术问题。 权利要求书2页 说明书22页 附图4页 CN 1。

3、11309765 A 2020.06.19 CN 111309765 A 1.一种直接查询结构化数据的方法, 其特征在于, 包括如下步骤: 根据用户代理发送的数据查询请求进行合法性检查, 生成有效数据查询语句; 根据所述有效数据查询语句进行执行, 得到查询结果; 根据所述查询结果写入套接字, 得到所述查询结果的响应输出。 2.根据权利要求1所述的直接查询结构化数据的方法, 其特征在于, 根据所述有效数据 查询语句进行执行, 得到查询结果之前, 还包括: 根据所述有效数据查询语句判断数据查询是本地查询还是远程查询; 当数据查询为本地查询时, 根据所述有效数据查询语句判断被查询数据库是否正在执 行。

4、数据查询请求; 当所述被查询数据库中正在执行数据查询请求时, 将所述有效查询语句保存。 3.根据权利要求2所述的直接查询结构化数据的方法, 其特征在于, 还包括: 当数据查询为远程查询时, 根据所述有效数据查询语句连接远程管理模块; 根据所述远程管理模块控制被查询服务器的数量小于预设阈值。 4.根据权利要求1所述的直接查询结构化数据的方法, 其特征在于, 根据用户代理发送 的数据查询请求进行合法性检查, 生成有效数据查询语句, 包括: 根据用户代理发送的数据查询请求检查所述数据查询请求是否超过设定值; 当未超过设定值时, 将所述数据查询请求中的请求参数进行分离; 根据所述分离的请求参数生成有效。

5、数据查询语句。 5.根据权利要求2所述的直接查询结构化数据的方法, 其特征在于, 根据所述有效数据 查询语句进行执行, 得到查询结果, 包括: 当所述被查询数据库中没有正在执行数据查询请求时, 根据所述有效数据查询语句中 的用户标识符确定用户身份; 根据所述用户身份打开被查询数据库; 根据所述被查询数据库执行有效数据查询语句, 得到查询结果。 6.根据权利要求3所述的直接查询结构化数据的方法, 其特征在于, 根据所述有效数据 查询语句进行执行, 得到查询结果, 包括: 当数据查询为远程查询时, 根据所述有效数据查询语句确定被查询数据库所在的远程 服务器及对应的程序接口; 根据所述程序接口将所述。

6、有效数据查询语句发送至所述远程服务器; 根据所述程序接口接收所述有效数据查询语句对应的查询结果。 7.根据权利要求1所述的直接查询结构化数据的方法, 其特征在于, 根据所述查询结果 写入套接字, 得到所述查询结果的响应输出, 包括: 根据所述查询结果设置查询结果中响应体键值; 根据所述查询结果计算响应体的长度; 将所述响应体键值和响应体长度写入到套接字, 得到查询结果的响应输出。 8.一种直接查询结构化数据的装置, 其特征在于, 包括: 请求合法性检查模块, 用于根据用户代理发送的数据查询请求进行合法性检查, 生成 有效数据查询语句; 执行模块, 用于根据所述有效数据查询语句进行执行, 得到查。

7、询结果; 权利要求书 1/2 页 2 CN 111309765 A 2 响应输出模块, 用于根据所述查询结果写入套接字, 得到所述查询结果的响应输出。 9.一种计算机可读存储介质, 其特征在于, 所述计算机可读存储介质存储有计算机指 令, 所述计算机指令用于使所述计算机执行如权利要求17任一项所述的直接查询结构化 数据的方法。 10.一种直接查询结构化数据的终端, 其特征在于, 包括: 存储器和处理器, 所述存储器 和所述处理器之间互相通信连接, 所述存储器存储有计算机指令, 所述处理器通过执行所 述计算机指令, 从而执行如权利要求17任一项所述的直接查询结构化数据的方法。 权利要求书 2/2。

8、 页 3 CN 111309765 A 3 一种直接查询结构化数据的方法及装置 技术领域 0001 本发明涉及网页前端技术领域, 具体涉及一种直接查询结构化数据的方法及装 置。 背景技术 0002 网页前端是运行在PC端、 移动端等浏览器上展现给用户浏览的网页。 前端技术一 般分为前端设计和前端开发, 前端设计一般可以理解为网站的视觉设计, 前端开发则是网 站的前台代码实现, 包括基本的HTML(Hypertext Marked Language, 超文本标记语言)和 CSS(Cascading Style Sheets, 层叠样式表、 )以及JavaScript/ajax。 0003 在HT。

9、ML 5之前, 浏览器只能通过HTTP服务器实现对数据库的访问, 也不能直接操 作本地的数据库(仅提供了Cookie这种简单的本地存储机制)。 在HTML 5中, 增加了用于访 问本地存储和本地数据库的接口。 其中, 本地存储包括会话存储(sessionStorage)和本地 持久存储(localStorage)。 而本地数据库是通过网页脚本创建一个本地的数据库, 而且可 通过SQL语句执行CRUD操作, 从而可以让网页更加方便地操作结构化数据。 0004 然而, HTML5中的上述功能均只能通过编写ECMAScript脚本程序来使用; 因此采用 现有技术操作结构化数据时, 都需要编写额外的脚。

10、本程序, 加大了开发人员的工作量; 同时 上述方案中采用的ECMAScript是解释性编程语言, 执行效率相对较低, 且占用内存大。 发明内容 0005 有鉴于此, 本发明实施例提供了一种直接查询结构化数据的方法及装置, 以解决 现有技术中操作结构化数据时, 都需要编写额外的脚本程序, 加大了开发人员的工作量的 问题。 0006 本发明提出的技术方案如下: 0007 本发明实施例第一方面提供一种直接查询结构化数据的方法, 该方法包括如下步 骤: 根据用户代理发送的数据查询请求进行合法性检查, 生成有效数据查询语句; 根据所述 有效数据查询语句进行执行, 得到查询结果; 根据所述查询结果写入套接。

11、字, 得到所述查询 结果的响应输出。 0008 可选地, 根据所述有效数据查询语句进行执行, 得到查询结果之前, 还包括: 根据 所述有效数据查询语句判断数据查询是本地查询还是远程查询; 当数据查询为本地查询 时, 根据所述有效数据查询语句判断被查询数据库是否正在执行数据查询请求; 当所述被 查询数据库中正在执行数据查询请求时, 将所述有效查询语句保存。 0009 可选地, 该直接查询结构化数据的方法, 还包括: 当数据查询为远程查询时, 根据 所述有效数据查询语句连接远程管理模块; 根据所述远程管理模块控制被查询服务器的数 量小于预设阈值。 0010 可选地, 根据用户代理发送的数据查询请求。

12、进行合法性检查, 生成有效数据查询 语句, 包括: 根据用户代理发送的数据查询请求检查所述数据查询请求是否超过设定值; 当 说明书 1/22 页 4 CN 111309765 A 4 未超过设定值时, 将所述数据查询请求中的请求参数进行分离; 根据所述分离的请求参数 生成有效数据查询语句。 0011 可选地, 根据所述有效数据查询语句进行执行, 得到查询结果, 包括: 当所述被查 询数据库中没有正在执行数据查询请求时, 根据所述有效数据查询语句中的用户标识符确 定用户身份; 根据所述用户身份打开被查询数据库; 根据所述被查询数据库执行有效数据 查询语句, 得到查询结果。 0012 可选地, 根。

13、据所述有效数据查询语句进行执行, 得到查询结果, 包括: 当数据查询 为远程查询时, 根据所述有效数据查询语句确定被查询数据库所在的远程服务器及对应的 程序接口; 根据所述程序接口将所述有效数据查询语句发送至所述远程服务器; 根据所述 程序接口接收所述有效数据查询语句对应的查询结果。 0013 可选地, 根据所述查询结果写入套接字, 得到所述查询结果的响应输出, 包括: 根 据所述查询结果设置查询结果中响应体键值; 根据所述查询结果计算响应体的长度; 将所 述响应体键值和响应体长度写入到套接字, 得到查询结果的响应输出。 0014 本发明实施例第二方面提供一种直接查询结构化数据的装置, 该装置。

14、包括: 请求 合法性检查模块, 用于根据用户代理发送的数据查询请求进行合法性检查, 生成有效数据 查询语句; 执行模块, 用于根据所述有效数据查询语句进行执行, 得到查询结果; 响应输出 模块, 用于根据所述查询结果写入套接字, 得到所述查询结果的响应输出。 0015 本发明实施例第三方面提供一种计算机可读存储介质, 所述计算机可读存储介质 存储有计算机指令, 所述计算机指令用于使所述计算机执行如本发明实施例第一方面及第 一方面任一项所述的直接查询结构化数据的方法。 0016 本发明实施例第四方面提供一种直接查询结构化数据的终端, 包括: 存储器和处 理器, 所述存储器和所述处理器之间互相通信。

15、连接, 所述存储器存储有计算机指令, 所述处 理器通过执行所述计算机指令, 从而执行如本发明实施例第一方面及第一方面任一项所述 的直接查询结构化数据的方法。 0017 本发明提供的技术方案, 具有如下效果: 0018 本发明实施例提供的直接查询结构化数据的方法及装置, 通过引入新的lsql、 rsql、 rsqls图式, 为HTML网页提供了直接访问本地或者远程数据库并执行SQL语句的方法, 降低了编写前端脚本程序或者后台服务器程序的代码量。 因此, 通过实施本发明, 解决了现 有技术中操作结构化数据时需要编写额外的脚本程序, 且占用内存较大的技术问题。 附图说明 0019 为了更清楚地说明本。

16、发明具体实施方式或现有技术中的技术方案, 下面将对具体 实施方式或现有技术描述中所需要使用的附图作简单地介绍, 显而易见地, 下面描述中的 附图是本发明的一些实施方式, 对于本领域普通技术人员来讲, 在不付出创造性劳动的前 提下, 还可以根据这些附图获得其他的附图。 0020 图1是根据本发明实施例的直接查询结构化数据的方法的流程图; 0021 图2是根据本发明另一实施例的直接查询结构化数据的方法的流程图; 0022 图3是根据本发明另一实施例的直接查询结构化数据的方法的流程图; 0023 图4是根据本发明另一实施例的直接查询结构化数据的方法的流程图; 说明书 2/22 页 5 CN 1113。

17、09765 A 5 0024 图5是根据本发明另一实施例的直接查询结构化数据的方法的流程图; 0025 图6是根据本发明实施例的直接查询结构化数据的装置的结构框图; 0026 图7是根据本发明另一实施例的直接查询结构化数据的装置的结构原理图; 0027 图8是根据本发明另一实施例的直接查询结构化数据的装置的结构原理图; 0028 图9是根据本发明另一实施例的直接查询结构化数据的装置的结构原理图; 0029 图10是根据本发明另一实施例的直接查询结构化数据的装置的结构原理图; 0030 图11是本发明实施例提供的直接查询结构化数据的终端硬件结构示意图。 具体实施方式 0031 为使本发明实施例的。

18、目的、 技术方案和优点更加清楚, 下面将结合本发明实施例 中的附图, 对本发明实施例中的技术方案进行清楚、 完整地描述, 显然, 所描述的实施例是 本发明一部分实施例, 而不是全部的实施例。 基于本发明中的实施例, 本领域技术人员在没 有做出创造性劳动前提下所获得的所有其他实施例, 都属于本发明保护的范围。 0032 本发明实施例提供一种直接查询结构化数据的方法, 如图1所示, 该方法包括如下 步骤: 0033 步骤S101: 根据用户代理发送的数据查询请求进行合法性检查, 生成有效数据查 询语句。 0034 在一实施例中, 在进行合法性检查之前, 可以根据预设协议获取用户代理发送的 数据查询。

19、请求, 该数据查询请求包括请求行、 头部、 空行和请求体。 其中, 预设协议可以是本 地服务器和用户代理(浏览器或其他客户端)进程之间的Unix Domain Socket通讯协议, 该 通讯协议类似HTTP1.1, 可以将其称之为LSQL/RSQL协议, 在该实施例中可以将通讯协议的 名称定为LSQL/1.0, 1.0指版本号。 0035 在一实施例中, 根据网页的要求(通过Ajax接口可指定请求同步执行还是异步执 行)或者上下文(表单提交请求一般是同步执行的), 用户代理(浏览器或其他程序)会发起 异步请求或者同步请求。 同步请求或者异步请求是相对于网页内容或者脚本的上下文而言 的, 会在。

20、用户代理内部作处理, 对请求处理进程而言无须关心。 因此, 对LSQL/RSQL等请求来 讲, 在用户代理一侧发起请求的过程和后续处理与HTTP等图式几乎是一模一样的。 区别在 与: 对HTTP等图式, URL请求处理进程连接远程服务器, 按照HTTP协议的约定发送请求并等 待服务器的返回; 对LSQL/RSQL图式来讲, URL请求处理进程通过套接字连接到提供LSQL/ RSQL服务的本地服务器进程, 通过套接字发送请求, 并等待服务器返回的内容; 对HTTP等图 式, URL请求处理进程按照HTTP协议的响应头信息处理本地缓存; 对LSQL/RSQL图式来讲, URL请求处理进程不处理本地。

21、缓存, 也就是说, 对任何由LSQL/RSQL本地服务器返回的结果 都不做本地缓存处理。 0036 假定在本地有一个SQL数据库, 可通过如下URL在其上执行SQL查询。 lsql: / data/testdb/db? sqlQuerySELECT20a2C20b2C20sum(c)20FROM20tab1 20GROUP20BY20a3B 0037 在该URL中, lsql是本发明引入的新的URL图式(schema), 用于指定本URL将直接在 本地的SQL数据库上执行SQL查询; /data/testdb指定了本地SQL数据库文件的路径; db指定 了其后要执行的SQL语句的目标数据库名称。

22、; sqlQuery参数的值是一条经过URI编码(对URL 说明书 3/22 页 6 CN 111309765 A 6 中特殊字符, 如空格、 逗号、 分号等做转义处理)后的SQL语句, 解码后的内容为: 0038 SELECT a, b, sum(c)FROM tab1 GROUP BY a 0039 该URL也可以理解为发起了一个lsql请求(或LSQL请求), 其目标资源为本地数据 库文件/data/testdb中的db数据库, 要执行的SQL查询语句为SELECT a, b, sum(c)FROM tab1 GROUP BY a。 0040 此外, 该SQL数据库也可以位于远程服务器上。

23、, 则可通过如下URL在其上执行SQL查 询: 0041 rsql: /username: : 3306/mysql/db? sqlQuery SELECT20a2C20b2C20sum(c)20FROM20tab120GROUP20BY20a3B 0042 在该URL中, rsql是本发明引入的新的URL图式(schema), 用于指定本URL将直接在 远程SQL数据库上执行SQL查询; username是用户账号名称; password是用户账号对应的密 码; 是运行SQL数据库的主机名称; 3306是SQL数据库提供SQL查询服务的端口 号; /mysql/db指定了远程SQL数据库的类。

24、型以及其后要执行的SQL语句的目标数据库名称; sqlQuery参数的值是一条经过URI编码(对URL中特殊字符, 如空格、 逗号、 分号等做转义处 理)后的SQL语句, 解码后的内容同上。 0043 该URL也可以理解为发起了一个rsql请求(或者RSQL请求), 其目标资源为远程主 机上的数据库db(数据库类型为mysql), 要执行的SQL查询语句为SELECT a, b, sum(c)FROM tab1 GROUP BY a。 该远程主机在端口3306上处理rsql请求, 连接使用的用户 账号名称和密码分别为: username、 password。 0044 另外, 如https是h。

25、ttp的加密传输协议一样, rsqls可以作为rsql的加密图式(lsql 图式不需要支持加密传输)。 0045 在一实施例中, 对于上述LSQL URL, 可以采用GET方法传递也可以采用POST的方法 进行传递。 其中, 采用GET方法时, 用户代理发送的LSQL请求的内容如下: 0046 GET 0047 /data/testdb/db? sqlQuerySELECT20a2C20b2C20sum(c) 20FROM20tab120GROUP20BY20a3B LSQL/1.0 0048 UserAgent: Mozilla/5.0(Windows; U; Windows NT 5.1;。

26、 enUS; rv: 1.7.6) Gecko/20050225Firefox/1.0.1 0049 UserName: username 0050 此外, 采用POST方法传递该数据查询请求时, 其请求内容如下: 0051 POST/data/testdb/db LSQL/1.0 0052 UserAgent: Mozilla/5.0(Windows; U; Windows NT 5.1; enUS; rv: 1.7.6) Gecko/20050225Firefox/1.0.1 0053 UserId: 100 0054 ContentType: application/xwwwformur。

27、lencoded 0055 ContentLength: 71 0056 sqlQuerySELECT20a2C20b2C20sum(c)20FROM20tab1 20GROUP20BY20a3B 0057 在上述两个采用GET方法或POST方法传递的数据查询请求中, 其对应的头部信息 说明书 4/22 页 7 CN 111309765 A 7 包括: UserAgent(表示用户代理标识字符串)、 UserId(执行用户代理的用户标识符, 和 UserName二者选其一, 在本例中为100; 该头部信息将用作安全性检查)、 UserName(表 示执行用户代理的用户账号名称, 和UserId。

28、二者选其一; 该头部信息将用作安全性检查, 主要在非Unix类操作系统上使用)、 ContentType(使用POST方法时, 该头部信息规定了请 求体的内容类型, 通常为application/xwwwformurlencoded)、 ContentLength(使 用POST方法时, 该头部信息规定了请求体的内容长度(字节数), 上例中为67)。 0058 在一实施例中, 对于上述RSQL URL, 同样可以采用GET方法传递也可以采用POST的 方法进行传递。 其中, 采用GET方法时, 用户代理发送的RSQL请求的内容如下: 0059 GET 0060 /mysql/db? sqlQu。

29、erySELECT20a2C20b2C20sum(c)20FROM 20tab120GROUP20BY20a3B RSQL/1.0 0061 UserAgent: Mozilla/5.0(Windows; U; Windows NT 5.1; enUS; rv: 1.7.6) Gecko/20050225 Firefox/1.0.1 0062 Host: 0063 Port: 3306 0064 User: username 0065 Password: password 0066 此外, 采用POST方法传递该数据查询请求时, 其请求内容如下: 0067 POST/mysql/db RSQL。

30、/1.0 0068 UserAgent: Mozilla/5.0(Windows; U; Windows NT 5.1; enUS; rv: 1.7.6) 0069 Gecko/20050225Firefox/1.0.1 0070 Host: 0071 Port: 3306 0072 User: username 0073 Password: password 0074 ContentType: application/xwwwformurlencoded 0075 ContentLength: 71 0076 sqlQuerySELECT20a2C20b2C20sum(c)20FROM20t。

31、ab1 20GROUP20BY20a3B 0077 对于RSQL请求, 其包含的头部信息和LSQL的头部信息部分相同。 此外, RSQL请求的 头部信息还包括: Host(表示指定要连接的远程数据库所在主机)、 Port(指定远程数据库提 供服务的端口号)、 User(指定连接远程数据库的用户名)、 Password(指定连接远程数据的 用户名对应的密码)。 0078 在一实施例中, 对于RSQL URL的加密模式RSQLS请求, 也可以通过RSQL协议发起请 求, 不同在于, RSQLS请求需要在头部信息中额外提供SSL连接证书等信息。 因此, RSQLS请求 采用GET方法传递时, 其请求。

32、内容如下: 0079 GET 0080 /mysql/db? sqlQuerySELECT20a2C20b2C20sum(c)20FROM 20tab120GROUP20BY20a3B RSQL/1.0 说明书 5/22 页 8 CN 111309765 A 8 0081 UserAgent: Mozilla/5.0(Windows; U; Windows NT 5.1; enUS; rv: 1.7.6) 0082 Gecko/20050225Firefox/1.0.1 0083 Host: 0084 Port: 3306 0085 User: username 0086 Password: 。

33、password 0087 SSLCa: /home/mysql/cacert.pem 0088 SSLCert: /home/mysql/clientcert.pem 0089 SSLKey: /home/mysql/clientkey.pem 0090 对于RSQLS请求, 其头部信息中还包括: SSLCa(表示指定建立SSL连接时的CA证 书)、 SSLCert(表示指定建立SSL连接时的客户端证书)、 SSLKey(表示指定建立SSL连接 时的客户端密钥)。 0091 步骤S102: 根据有效数据查询语句进行执行, 得到查询结果。 0092 在一实施例中, 对有效数据查询语句进行执行之。

34、前还包括: 根据有效数据查询语 句判断数据查询是本地查询还是远程查询; 当数据查询为本地查询时, 根据有效数据查询 语句判断被查询数据库是否正在执行数据查询请求; 当被查询数据库中正在执行数据查询 请求时, 将有效查询语句保存。 0093 由于被查询的数据库可以位于本地数据库也可能位于远程服务器的数据库中, 因 此可以根据预先定义的本地查询(LSQL)和远程查询(RSQL), 对有效数据查询语句中的图式 进行识别, 当确定为本地查询(LSQL)时, 由于LSQL请求使用单一的SQL数据库引擎 (SQLite), 而SQLite等小型SQL数据库引擎均不提供数据库的并发访问能力, 故而在执行 S。

35、QL语句之前, 还需要检查被查询数据库上是否正在执行某个特定的LSQL请求, 如果是, 需 要等待该请求结束后才能执行新的请求。 此种情况下, 需要使用队列来保存新的请求, 当某 个请求结束时, 检查保存的请求, 如果对应数据库上没有其他正在执行的请求, 则执行该请 求。 0094 此外, 也可以使用Oracle Berkeley DB等其他的数据库引擎来实现lsql图式, 但 需要增加对SQL语句的支持, 这包括SQL语法解析和执行的相关模块。 在支持多种不同的本 地数据库引擎的情况下, lsql图式可通过判断数据库文件的格式来确定具体的数据库引 擎。 0095 在一实施例中, 当数据查询为。

36、远程查询时, 根据有效数据查询语句连接远程管理 模块; 根据远程管理模块控制被查询服务器的数量小于预设阈值。 0096 具体地, 由于RSQL请求的SQL执行是在远程服务器上执行的, 在执行之前, 要通过 装载不同的子驱动程序来处理和不同远程数据库类型之间的差异, 同时需要一个远程连接 的管理模块来管理这些连接: 该远程管理模块控制连接到同一远程服务器的数量不要超过 限制; 控制来自同一用户代理的、 控制连接到同一远程服务器的数量不要超过限制; 避免频 繁关闭并打开指向同一远程数据库的连接, 当用户相同时, 应考虑优先复用连接。 0097 在该实施例中, 为了区别远程数据库的不同类型(如MyS。

37、QL、 PostgreSQL等), 在 rsql图式的实现中增加了建立连接后就数据库实例类型进行协商的机制, 用户代理根据协 商结果装载对应数据库实例类型的子驱动程序来完成和远程数据库实例的通讯。 同时也可 说明书 6/22 页 9 CN 111309765 A 9 以为不同的数据库类型直接定义不同的图式名称, 比如: 0098 mysql: / sqlQuery. 0099 postgresql: / sqlQuery. 0100 sqlserver: / sqlQuery. 0101 db2: / sqlQuery. 0102 步骤S103: 根据查询结果写入套接字, 得到查询结果的响应输。

38、出。 具体地, 生成查 询结果的响应输出时, 可以首先构建一个JSON对象代表响应体, 然后按照LSQL/RSQL响应的 格式要求写入套接字, 最终得到查询结果的相应输出输出。 0103 本发明实施例提供的直接查询结构化数据的方法, 通过引入新的lsql、 rsql、 rsqls图式, 为HTML网页提供了直接访问本地或者远程数据库并执行SQL语句的方法, 降低 了编写前端脚本程序或者后台服务器程序的代码量。 因此, 通过实施本发明, 解决了现有技 术中操作结构化数据时需要编写额外的脚本程序, 且占用内存较大的技术问题。 0104 作为本发明实施例的一种可选的实施方式, 如图2所示, 步骤S1。

39、01根据用户代理发 送的数据查询请求进行合法性检查, 生成有效数据查询语句, 包括如下步骤: 0105 步骤S111: 根据用户代理发送的数据查询请求检查数据查询请求是否超过设定 值; 具体地, 需要检查正在处理未返回的LSQL请求或RSQL请求是否超过设定值, 包括来自单 个用户代理运行实例(根据套接字标识符区别)的所有正在处理的请求个数以及全部正在 处理的LSQL请求或RSQL请求个数。 0106 步骤S112: 当未超过设定值时, 将数据查询请求中的请求参数进行分离。 0107 在一实施例中, 对于LSQL请求, 可以将请求行和请求体中的数据库文件路径 (dbFile, 如/data/t。

40、estdb)、 数据库名称(dbName, 如db)、 用来打开数据库的用户标识符 (userId)、 用来打开数据库的用户名称(userName)、 变量化SQL语句(sqlQuery)和结果集的 行格式(sqlRowFormat)分离出来, 并将其组织为字典数据结果。 此外, 也还可以将请求行和 请求体中的其他请求参数进行分离。 0108 其中, userId是用来打开数据库的用户标识符。 尽管LSQL的请求头部中包含有 UserId信息, 但我们不能依赖该头部信息来确定用户代理进程的用户标识符, 而应该通 过系统调用获得Unix套接字另一端的进程以及用户标识符信息。 在Unix类系统上,。

41、 这通过 调用getsockopt函数获得SOPEERCRED选项的值来获得此信息。 如果通过系统调用获得的 用户标识符和通过LSQL请求头部中的用户标识符不符, 则应当作非法请求处理。 0109 为了方便在HTML文档中通过表单元素的名称和值构成不同的SQL语句, 可以对作 为参数传递的数据查询请求做变量化处理; 具体可以使用¥作为前缀定义数据查询请求中 的变量, 如¥Id, 表示在生成最终的数据查询请求时, 该变量要使用同时传递的同名URL参 数替代。 也可以使用其他URL参数定义该变量的值。 因此, 对于上述LSQL URL, 可以作变量化 处理得到: 0110 lsql: /data/。

42、testdb/db? sqlQueryDELETE20FROM20Books20WHERE 20Id3D¥Id3B&Id1 0111 该URL包含两个参数: sqlQuery对应的值是一个变量化SQL语句, 解码后为: DELETE FROM Books WHERE Id¥Id及Id对应的值是1, 这组参数将用来替代上面变量化SQL语句 中的¥Id。 因此该URL最终执行的SQL语句为: DELETE FROM Books WHERE Id1 说明书 7/22 页 10 CN 111309765 A 10 0112 通过变量化SQL语句(数据查询请求), 有利于通过表单中的输入项来设定SQL语。

43、句 中的不同值, 而变量化的SQL语句可以保持不变, 从而降低编码量。 而如果不使用变量化的 SQL语句将需要额外的脚本代码来生成最终的SQL语句。 0113 变量化SQL语句中的变量名称需满足如下规范: 以¥字符开头, 紧随其后的字符必 须为字母; 且其后只包含数字、 字母和下划线; 且任何非数字、 字母和下划线字符表示变量 名称的终结; 保留¥字符后为数字的情形, 可用作以顺序指代参数; 变量名称是大小写敏感 的; 也就是说¥abc和¥Abc表示不同的变量。 为了正确处理SQL语句中原本含有¥字符的情 形, 对¥字符作转义处理: 对原SQL语句中按以上规则会被处理为变量名称的, 使用¥做 。

44、转义处理。 若按以上规则不会处理为变量名称的, 无须做转义处理。 0114 如下面的原始SQL语句: 0115 SELECTFROM Books WHERE Code ¥name¥15¥ 0116 需要做如下转义处理: 0117 SELECTFROM Books WHERE Code ¥name¥15¥ 0118 原始SQL语句中的最后一个¥字符, 由于不构成变量化SQL语句中的变量名称, 故 而无须转义。 此外, 对于变量化SQL语句, 也可以采用不同于¥字符的变量名称定义规则, 比 如、 等。 0119 例如, 需要从Books表中查找所有Fyodor Dostoyevsky的书, 并使用。

45、ISBN对结果进 行排序, 则对应的SQL语句应该为: 0120 SELECT Title, Isbn FROM Books WHERE Author Fyodor Dostoyevsky SORT BY Isbn ASC; 0121 但可以根据上述变量化处理的规范对该SQL语句做变量化处理: 0122 SELECT Title, Isbn FROM Books WHERE Author ¥author SORT BY¥sortBy ¥sortOrder; 0123 之后在传递该数据查询请求时, 可以通过如下代码传递真实的变量值: lsql: / data/testdb/db? sqlQuer。

46、ySELECT20Title2C20Isbn20FROM20Books 20WHERE20Author3D 24author 20SORT20BY2024sortBy20 24sortOrder3B&authorFyodor20Dostoyevsky&sortByIsbn&sortOrderASC 0124 由于用户代理在生成数据查询请求时进行了变量化处理, 因此在将请求行和请求 体中的请求参数进行分离时, 可以将变量化SQL语句(sqlQuery)参数进行分离。 0125 在一实施例中, 对于LSQL请求进行合法性检查时, 还可以检查请求头部中定义的 请求实体长度和每个URI的长度是否超过限。

47、制值; 检查请求头部中定义的用户标识符 userId或者userName是否和套接字返回的选项值匹配。 ; 检查dbFile指定数据库文件是否 存在并检查访问权限。 ; 检查sqlRowFormat指定的值, 确保为dict或者array之一。 0126 在一实施例中, 对于RSQL请求, 可以将请求行和请求体中的远程数据库所在主机 (Host, 如)、 数据库名称(Port, 如3306)、 用来连接远程数据库的用户名称(o dbUsername)、 用来连接远程数据库的密码(dbPassword)、 远程数据库类型(dbType, 如 mysql)、 远程数据库名称(dbName, 如db。

48、)、 变量化SQL语句(sqlQuery)、 结果集的行格式 (sqlRowFormat)、 建立SSL连接使用的CA证书文件(SSLCa)、 建立SSL连接使用的客户端证书 文件(SSLCert)及建立SSL连接使用的客户端密钥文件(SSLKey)分离出来, 并将其组织为字 说明书 8/22 页 11 CN 111309765 A 11 典数据结果。 此外, 也还可以将请求行和请求体中的其他请求参数进行分离。 0127 在一实施例中, 对于RSQL请求进行合法性检查时, 还可以检查请求头部中定义的 请求实体长度和每个URI的长度是否超过限制值; 检查请求头部中定义的用户标识符 userId或。

49、者userName是否和套接字返回的选项值匹配; 检查给定的数据库类型(dbType)是 否支持; 检查sqlRowFormat指定的值, 确保为dict或者array之一。 0128 同时, 对于RSQL请求进行合法性检查时, 还可以建立到指定主机及端口号的连接 (若指定有SSLCa, 则使用加密连接), 并传入dbUsername、 dbPassword以及dbName等参数。 0129 步骤S113: 根据分离的请求参数生成有效数据查询语句。 具体地, 在生成最终的有 效数据查询语句时, 需要确定所有符合约定的SQL语句变量是否均包含有对应的参数, 如 有, 则用该参数的值替代该变量, 即用实际值替换这些变量从而生成要执行的有效数据查 询语句。 0130 需要说明的是, 检查请求合法性时, 在出现非法请求情况下, 可能提前返回错误状 态。 其中, 错误状态可以用400Bad Request(错误请求)、 403Forbidden(禁止)、 401Unauthorized(未验证)、 501Not Implemented(未实现)或404Not Found(找不到)等状 态码表示。 此外, 还可以包括其他的状态码, 这些状态码可以是HTTP状态码的子集。 具体可 以包括消息状态码(对应的HTTP状态码范围为100199)以及重定向状态码(对应的HTTP状 态码范围为300。

展开阅读全文
内容关键字: 直接 查询 结构 数据 方法 装置
关于本文
本文标题:直接查询结构化数据的方法及装置.pdf
链接地址:https://www.zhuanlichaxun.net/pdf/9193097.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1