kbmmw 中JSON 中使用SQL 查询
前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值?
一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式,
就是通过SQL 方式查询JSON 中的值。也就是说用TKbmmwmemSQL 控件来实现。
TKbmmwmemSQL 也可以用来查询 XML 和 CSV 文件,今天只说一下JSON 的查询。
我们首先在窗体中放一个Tkbmmwmemsql 控件,

如图设置其属性。
直接使用kbmmwmemSQL控件查询JSON , 首先需要把json串 保存成文本文件。
这里提供一个简单的jSON 文件,内容如下:
{"result":[{"ID":1,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":2,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":3,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":4,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":5,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":6,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":7,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":8,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":9,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":10,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"}]}
文件名为aaa.json,存放在当前目录下。
然后我们执行以下代码
procedure TForm1.Button5Click(Sender: TObject);
var
sqls:string;
begin
sqls:='SELECT ID,name,date FROM datafile FILE(JSON,''.\aaa.json'')'
+' SUBSET ''/result/.*'''
+' ORDER BY ID';
memo2.Lines.Clear;
memo2.Lines.Add(sqls);
kbmmwmemsql1.ExecSQL(sqls);
end;
运行结果如下

加入条件,继续查询。
procedure TForm1.Button5Click(Sender: TObject);
var
sqls:string;
begin
sqls:='SELECT ID,name,date FROM datafile FILE(JSON,''.\aaa.json'')'
+' SUBSET ''/result/.*'''
+' where ID=5'
+' ORDER BY ID';
memo2.Lines.Clear;
memo2.Lines.Add(sqls);
kbmmwmemsql1.ExecSQL(sqls);
end;
运行结果如下:

怎么样,方便不?
有的人可能觉得要存成文件,不方便,怎么办?
好吧,我们换个姿势,再来。
我们可以直接使用Tkbmmwmemsql 直接把JSON 对象加进去,然后像正常的表进行查询。
代码如下:
procedure TForm1.Button6Click(Sender: TObject);
var
js:TkbmMWJSONStreamer;
fjson:TkbmMWONCustomObject;
sqls:string;
begin
js:=TkbmMWJSONStreamer.Create;
fjson:=js.LoadFromUTF16String(memo1.Text);
js.Free;
kbmmwmemsql1.Tables.Add('MYJSONT',FJSON); sqls:='SELECT ID,name,date FROM MYJSON'
+' SUBSET ''/result/.*'''
+' ORDER BY ID';
memo2.Lines.Clear;
memo2.Lines.Add(sqls);
kbmmwmemsql1.ExecSQL(sqls);
end;
运行结果如图

同样可以加入查询条件
procedure TForm1.Button6Click(Sender: TObject);
var
js:TkbmMWJSONStreamer;
fjson:TkbmMWONCustomObject;
sqls:string;
begin
js:=TkbmMWJSONStreamer.Create;
fjson:=js.LoadFromUTF16String(memo1.Text);
js.Free;
kbmmwmemsql1.Tables.Add('MYJSONT',FJSON); sqls:='SELECT ID,name,date FROM MYJSON'
+' SUBSET ''/result/.*'''
+' where ID=6'
+' ORDER BY ID';
memo2.Lines.Clear;
memo2.Lines.Add(sqls);
kbmmwmemsql1.ExecSQL(sqls);
end;
运行结果如图

打完收功。
注意,要运行以上例子,请引用kbmMWJSON, kbmMWSQLJSONAPI,kbmMWObjectNotation
这几个单元。
kbmmw 中JSON 中使用SQL 查询的更多相关文章
- 在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号
在Delphi中动态地使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性.下面介绍如何在Delphi中实现这种功能.在Delphi中,使用SQL查询语句的途 ...
- django中使用原生的sql查询实例
在app文件夹下创建database_operations.py文件,写如下内容: import pymysql from 项目名.settings import DATABASES class Da ...
- Laravel框架中如何使用事件记录SQL查询到日志
在本文中,我们将说一下如何处理Laravel中的查询日志记录.如果你非常熟悉Laravel框架,Laravel可以选择将所有在当前请求中运行的查询记录在内存中. 查询记录 如果,你想要将日志文件保存在 ...
- SpringBoot中JPA使用动态SQL查询
https://www.jianshu.com/p/f72d82e90948 可以重点关注方法二,把原生sql传入数据库去查询 好处是:更加灵活坏处是:拼接sql比较痛苦,也容易出问题,比如拼接的sq ...
- QuerySet中添加Extra进行SQL查询
select参数接受一个映射到SQL的字符串标识字典,让你可以根据SQL select子句里的选择进行对模型实例添加属性,或者查询. from blog.models import BlogPost& ...
- django 视图中执行原生的 sql 查询语句
可以使用objects的raw()方法执行原生的sql语句,进行对数据库的查询操作,raw()方法只能执行查询语句 query_set = your_model.objects.raw("s ...
- jQuery中json中关于带有html代码网页的处理
昨天在使用jQuery的get方式请求返回json格式数据.然后使用jQuery自带的parseJSON 处理.总是出现这样的错误. 如果返回数据中content改成普通的数据可以通过.找了半天错误, ...
- json中loads的用法
python中json中的loads()和dumps()它们的作用经常弄换了,这里记录下,loads方法是把json对象转化为python对象,dumps方法是把pyhon对象转化为json对象,我是 ...
- SQL 查询总结
参考资料: SELECT 查询语句格式与简单查询 SQL中distinct的用法 SQL 查询总结
随机推荐
- POJ-1458.CommonSubsequence.(DP:最长公共子序列裸题)
本题大意:给出两个字符串,让你求出最长公共子序列的长度并输出. 本题思路:本题是经典的DP问题,由于是两个字符串,那么我们就用一个二维数组来进行区分,用dp[ i ][ j ]来表示在s1和s2中分别 ...
- 6. ZigZag Conversion (字符串的连接)
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- latex安装及基本使用
安装 需要两个文件,texlive2018.iso和texstudio-2.12.14-win-qt5.exe. 首先安装texlive2018.iso,管理员权限运行其中的install-tl-ad ...
- ASCII码翻译方法可直接使用谷歌
ASCII码翻译方法可直接使用谷歌. 如: key{you are right} 将此段ASCII码输入谷歌搜索栏,直接翻译结果:
- Dockerfile指令学习 (转)
原文地址:http://blog.csdn.net/we_shell/article/details/38445979 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一 ...
- 使用PHP来简单的创建一个RPC服务
RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...
- js去除字符串空格(空白符)
使用js去除字符串内所带有空格,有以下三种方法: ( 1 ) replace正则匹配方法 去除字符串内所有的空格:str = str.replace(/\s*/g,""); 去除字 ...
- js DomContentLoaded 和 load 的区别
如题:DOMContentLoaded和load都是页面加载的时候触发的事件.区别在于触发的时机不一样. 浏览器渲染页面DOM文档加载的步骤: 1.解析HTML结构. 2.加载外部脚本和css文件. ...
- laravel中不使用 remember_token时退出报错,如何解决?
Route::get('auth/logout','Auth\AuthController@getLogout'); 这是laravel自带的退出功能只需要写这一条路由就行了,但是很可能爆出以下错误: ...
- Jmeter常用脚本开发之Junit Request
说明:Junit Request就是把Junit测试框架的自动化用例在jmeter上执行 步骤: 1.创建Java工程,编写Junit自动化测试用例 2.然后把用例打成jar包,复制到Jmter的li ...