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 查询总结
随机推荐
- js navigator对象
原文:https://www.cnblogs.com/huyihao/p/6003110.html Navigator 对象包含有关浏览器的信息. 很多时候我们需要在判断网页所处的浏览器和平台,Nav ...
- LeetCode第20题
LeetCode20题不多说上代码 public boolean isValid(String s){ Stack<Character> stack = new Stack<Char ...
- WdatePicker控件中日期的范围选择
1.开始日期不能大于结束日期,结束日期只能选择今天之前(不包括今天) <asp:TextBox ID="T_CREATION_DATE_Start" Width=" ...
- mysql中创建event定时任务
从网上借鉴大神的. use onlinexam; -- 查看event事件是否开启 show variables like '%sche%'; -- 开启event事件 (非常重要) set glo ...
- mute
mute - 必应词典 英[mjuːt] n.哑吧:沉默的人:[法律]拒绝答辩的被告人:鸟粪 adj.哑的:缄默无言的:(一时)说不出话的:(猎狗)不叫的 v.排泄:减弱…的声音:柔和…的色调 网络静 ...
- Springboot学习02-webjars和静态资源映射规则
Springboot学习01-webjars和静态资源映射规则 前言 1-以前我们在IDEA中创建一个项目,添加web依赖包,我们现在是一个web应用,应该在man目录下面有一个webapp文件夹,将 ...
- 【校招面试 之 C/C++】第14题 C++ 内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区(堆栈的区别)
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等.在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用.和堆一样 ...
- Pyqt5的事例讲解
1.第一个gui程序 import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QMainWind ...
- 针对appium的webdriver执行swipe无效的解决办法
self.driver.swipe(x1,y1,x2,y1,t) 当时代码里有如上这么一句,当时源码是这么说的: # convenience method added to Appium (NOT S ...
- Android Studio 运行shell
public void RunCmd(String mycmd) { Process su = null; try { su = Runtime.getRuntime().exec("su& ...