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 查询总结
随机推荐
- php苹果内购订单验证
/** * 21000 App Store不能读取你提供的JSON对象 * 21002 receipt-data域的数据有问题 * 21003 receipt无法通过验证 * 21004 提供的sha ...
- input type='number'时,maxlength属性无效
<input type="number" oninput="if(value.length>11)value=value.slice(0,11)" ...
- 给自己的博客上添加个flash宠物插件
前言 最近在一些博主的博客上看到一些小宠物的挂件,很有趣,访客到了网站后可以耍耍小宠物,增加网站的趣味性,在功能强大的博客系统上看到有这样的小宠物挂件还是蛮有趣的. 正文 下面就简单介绍下如何在博客园 ...
- PTA 7-50 畅通工程之局部最小花费问题(最小生成树Kruskal)
某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出“畅通工程”的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路相连,只要互相间接通过快速路可达即可). ...
- day 10 函数名的运用,闭包,迭代器
函数名的本质 函数名本质上就是函数的内存地址 函数名的五种运用: 1.函数名是一个变量 def func(): print(666) print(func) # 函数的内存地址 <functio ...
- docker-ce-17.09 网络基础配置
一.端口映射实现访问容器 1.我们先从pull一个nginx镜像,然后后台运行该镜像 > docker pull nginx > docker run -d -P nginx:latest ...
- golang语言中sync/atomic包的学习与使用
package main; import ( "sync/atomic" "fmt" "sync" ) //atomic包提供了底层的原子级 ...
- c#Loading 页SplashScreenManager的使用
一.新建一个加载界面: SplashScreenManager控件只是作为加载界面的统一管理器,我们要使用加载界面,需要自行创建加载界面,两种方法如下: 1.点击SplashScreenManager ...
- 4N - 素数回文
xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数.(5 &l ...
- Java.Annotations
Annotation 0. Annotation Tricks http://developer.android.com/reference/java/lang/annotation/Annotati ...