`
ywxowen999
  • 浏览: 23639 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

TrimQuery

阅读更多
  
   TrimQuery引擎是TrimPath开源项目的一个轻量组件,遵守GPL & APL开源协议。 它可以为你的客户端程序提供使用sql的能力。
  
   TrimQuery引擎是使用javascript编写的,源代码大约900多行。最新版本号为1.1.14
项目托管在google code。地址:http://code.google.com/p/trimpath/

  TrimQuery引擎支持类似于SQL的语法有:
  INSERT, UPDATE, DELETE
  SELECT ... FROM
  WHERE ...
  LIKE ...
  ORDER BY ... ASC/DESC
  AS ...
  GROUP BY ... HAVING ...
  SUM, COUNT, AVG 聚合函数
  自联接(self join)
  LIMIT和偏移量
  “?”占位符(类似JAVA JDBC的中的方式)
不支持的SQL语法:
  BETWEEN
  IN (for lists and for sub-queries or nested SELECT's)
  ANY
  EXISTS
  DISTINCT
  AVG DISTINCT, SUM DISTINCT, COUNT DISTINCT
  LEFT OUTER JOIN
  RIGHT OUTER JOIN
  FULL OUTER JOIN
  UNION, EXCEPT, INTERSECT


  下面通过一个简单的例子了解TrimQuery(代码在附件中文件 TrimQueryDemo.html)
<!DOCTYPE >
<html>
	<head>
		<title>TrimQuery Demo</title>
	</head>
	<script type="text/javascript" src="trimpath-query-1.1.14.js"></script>
	<script type="text/javascript" src="json.js"></script>
	<script type="text/javascript">

		//定义表结构
		var columnDefs = {
			Invoice : {
				id : {
					type: "String"
				},
				total : {
					type: "Number"
				},
				custId : {
					type: "String"
				}
			},
			Customer : {
				id : {
					type: "String"
				},
				acctBalance : {
					type: "Number"
				}
			}
		};
		
		//表数据
		var tableData = {
			Invoice  : [{
				id: 1,
				total: 100,
				custId: 10
			},{
				id: 2,
				total: 200,
				custId: 10
			},{
				id: 3,
				total: 300,
				custId: 10
			},{
				id: 4,
				total: 400,
				custId: 20
			} ],
			Customer : [{
				id: 10,
				acctBalance: 1000
			},{
				id: 20,
				acctBalance: 2000
			},{
				id: 30,
				acctBalance: 3000
			} ]
		};
		
		//首先我们预编译查询表。
		var queryLang = TrimPath.makeQueryLang(columnDefs);

		// 下面我们做一个查询。
		var statement = queryLang.parseSQL(
		"SELECT Customer.id, Customer.acctBalance, Invoice.total " +
		"FROM Customer, Invoice " +
		"WHERE Customer.id = Invoice.custId " +
		"ORDER BY Customer.id ASC");

		// 运行查询语句在指定的数据集中查询结果集。
		var results = statement.filter(tableData);
		//输出查询结果
		alert(results.toJSONString());

		// 此外我们可可以获取查询语句。
		alert(statement.toString());
	</script>
	<body>
	</body>
</html>

  通过上例相信大家已经看出了里面的道道,使用TrimQuery首先要有表的定义,然后要有表数据,最后通过查询语句获得结果集。

  下面详细介绍下TrimQuery中提供的方法(API)
  TrimPath是一个全局对象,在这个对象中包含有TrimQuery方法。

  TrimPath.makeQueryLang(表定义) :用于预声明 要操作的表结构。也就是确定操作的范围。该函数返回一个queryLang 对象,这个对象下包括一系列的SQL操作方法。如果多次使用相同的参数调用TrimPath.makeQueryLang方法,将会生成多个不同的queryLang 对象。参数格式如例子中columnDefs定义的格式
 
  queryLang.parseSQL(sqlString,optionalParamsArray):方法用于声明执行的SQL语句。第一个参数是SQL语句字符串,第二个参数为可选参数,支持"?"替换,防止脚本注入。如果SQL语句不符合语法则会抛出异常。方法会返回一个selectStatement 对象,通过这个对象就可以查询了。
包括第二个参数的例子:
selectStatement = queryLang.parseSQL(
  "SELECT Customer.* FROM Customer " +
                    "WHERE Customer.acctBalance > ? " +
                      "AND Customer.acctBalance < ?"
  , [ minBalance, maxBalance ]);


  selectStatement.filter( tableData, options ):方法用于执行SQL语句。第一个参数是作用的表数据集,格式如例子中的tableData ,第二个参数可选,我这里就不介绍了。返回结果集是一个JSON对象。

selectStatement.toString():方法返回一个String表示selectStatement对象的SQL。

再说说TrimQuery的SQL语法需要注意的点
TrimQuery的所有关键字必须大写。
列必须使用TableName.columnName点缀语法指定
TrimQuery不支持复杂的函数。
下面列出TrimQuery SQL的示例:
//查询全表
SELECT * FROM Invoice

//查询全表
SELECT Invoice.* FROM Invoice                    

//查询指定列
SELECT Invoice.id, Invoice.total FROM Invoice

//两表联合查询
SELECT Invoice.id, Invoice.total, Customer.acctBalance FROM Invoice, Customer

//量表联合查询使用 *
SELECT Invoice.*, Customer.* FROM Invoice, Customer

//使用AS 为表重命名
SELECT i.* FROM Invoice AS i

//使用AS为列重命名
SELECT i.id AS ID_NUM FROM Invoice AS i

//量表联合查询中使用AS
SELECT Invoice.*, i2.* FROM Invoice, Invoice AS i2

//两表联合查询使用 关联条件 过滤
SELECT Customer.id, Invoice.custId, Invoice.total, Customer.acctBalance 
              FROM Invoice, Customer 
              WHERE Invoice.custId = Customer.id

//两表联合查询使用 关联条件 过滤条件 过滤
SELECT Customer.id, Invoice.custId, Invoice.total, Customer.acctBalance 
              FROM Invoice, Customer 
              WHERE Invoice.total < 250 AND Invoice.custId = Customer.id

// 使用ORDER BY 语句为结果集排序
SELECT Invoice.id FROM Invoice ORDER BY Invoice.id

//指定排序规则 为升序
SELECT Invoice.id FROM Invoice ORDER BY Invoice.id ASC

//指定排序规则为降序
SELECT Invoice.id FROM Invoice ORDER BY Invoice.id DESC

//使用多列作为排序列
SELECT Invoice.custId, Invoice.id FROM Invoice ORDER BY Invoice.custId DESC, Invoice.id

//获取前100条数据
SELECT Refund.* FROM Refund LIMIT 100

//获取从100到 100 + 50的数据
SELECT Refund.* FROM Refund LIMIT 100, 50 

//使用集合函数
SELECT Invoice.total, 
              SUM (Invoice.total) AS SUM_total,
              COUNT (Invoice.total) AS COUNT_total,
              AVG (Invoice.total) AS AVG_total 
              FROM Invoice

//使用GROUP BY 语法
SELECT Invoice.total, 
              SUM (Invoice.total) AS SUM_total,
              COUNT (Invoice.total) AS COUNT_total,
              AVG (Invoice.total) AS AVG_total 
              FROM Invoice 
              GROUP BY Invoice.custId

//使用 GROUP BY 与 ORDER BY
SELECT Invoice.total, 
              SUM (Invoice.total) AS SUM_total
              FROM Invoice GROUP BY Invoice.custId ORDER BY SUM_total ASC

//使用 HAVING
SELECT Invoice.total AS TOT, 
              SUM (Invoice.total) AS SUM_total
              FROM Invoice
              GROUP BY Invoice.custId 
              HAVING (TOT) > 15000
              ORDER BY SUM_total ASC

//使用LIKE
SELECT * FROM User WHERE User.name LIKE 'P%'

//插入数据
INSERT INTO Event (id, date, invoice_id) VALUES (1, '2003-01-31', 43)

//更新数据
UPDATE User SET name='Frank Thomas' WHERE User.id = '3'

//删除数据
DELETE Thing FROM Thing WHERE Thing.id = '1'

好啦就些这么多。
0
0
分享到:
评论

相关推荐

    电动车上牌管理系统 SSM毕业设计 附带论文.zip

    电动车上牌管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl

    tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl

    【eclipse和idea两个版本运行源码】基于Java Swing +mysql 实现的网吧管理系统

    一、项目简介 本项目是一套基于Java Swing 开发的网吧管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 二、技术实现 ​后台技术:java swing ​数据库:MySQL ​数据库连接池:c3p0 三、系统主要功能 用户登录: 分为 普通用户和管理员 两种角色 菜单模块:上机,下机, 系统设置:管理员设置,会员设置,计费设置, 退出系统 管理模块:增加会员,删除会员,信息修改,信息查询 视图模块:主页视图,在线用户,统计视图, 统计报表模块:人数报表,收入报表 帮助模块:联系我们,关于系统 详见:https://blog.csdn.net/weixin_43860634/article/details/125247764

    pc-dmis软件脚本-输出Excel格式报告

    使用软件自带的basic脚本编辑制作的脚本 低版本软件无法输出Excel报告,可以通过脚本方式实现这一功能

    【java毕业设计】校园失物招领系统源码(springboot+vue+mysql+说明文档).zip

    项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse

    基于java的网上电子书店h答辩PPT.pptx

    基于java的网上电子书店h答辩PPT.pptx

    基于微信小程序的微信小程序校园失物招领答辩PPT.pptx

    基于微信小程序的微信小程序校园失物招领答辩PPT.pptx

    基于java的基于Java的学生综合测评管理系统答辩PPT.pptx

    基于java的基于Java的学生综合测评管理系统答辩PPT.pptx

    pandas-2.1.4-cp39-cp39-win_amd64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    判断题 - 题目列表 - 图-练习题集飒飒阿萨

    springboot体育器材管理系统(附源码+数据库)71175

    管理员功能: 用户管理:管理员可以管理用户账户,包括审核新注册用户、禁用违规用户、重置密码等操作。 器材管理:管理员可以管理器材的信息,包括添加新器材、编辑器材详情、设定器材规则和限制等。 器材预约与借还管理:管理员可以处理用户的器材预约请求,确认或调整预约时间,并记录借还操作。 库存管理:管理员可以监控器材库存情况,及时补充不足的器材并处理损坏或报废的器材。 数据统计与报表:管理员可以分析系统的使用情况和借还记录,生成数据统计报表以了解器材使用情况和借还频率等。 系统设置与维护:管理员可以进行系统设置,包括配置器材规则、设定可用时间段、备份数据、优化系统性能等。 消息通知与提醒:管理员可以向用户发送消息通知,如器材预约成功、归还提醒、系统更新通知等。

    Jira插件安装包Dynamic-forms

    Jira插件安装包Dynamic-forms

    pandas-2.1.4-cp311-cp311-win_amd64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    少儿图形化scratch编程作品源码集100个

    Scratch是一款由麻省理工学院(MIT)的“终身幼儿园团队”开发的图形化编程工具,专为儿童设计,旨在帮助他们学习编程思维和逻辑能力。

    基于java的学生就业管理系统答辩PPT.pptx

    基于java的学生就业管理系统答辩PPT.pptx

    课设毕设基于SpringBoot+Vue的旅游门票信息系统设计与实现源码可运行.zip

    本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac

    大学志愿填报系统.zip

    随着社会对志愿服务活动的日益重视,各大高校也纷纷参与到志愿服务的行列中。为了更好地管理和记录志愿者活动,提高志愿服务的质量和效率,我们开发了这款大学志愿服务系统。 该系统主要包括多个功能模块,如信息管理、活动管理、学生管理等。信息管理模块允许学校管理员录入、修改和删除学校的基本信息,包括学校账号、名称、联系电话、地址、特色以及办学理念等,确保信息的准确性和完整性。活动管理模块则用于记录和管理志愿者活动的相关信息,包括活动的名称、时间、地点、参与人员等,方便志愿者进行报名和签到。 此外,系统还提供了学生管理模块,用于记录学生的志愿服务经历和表现,为学生参与志愿服务提供便利。同时,系统还支持照片上传和展示功能,通过展示志愿者活动的照片,让更多人了解和关注志愿服务事业。 整个系统界面简洁明了,操作便捷,功能强大。通过使用该系统,高校可以更加高效地管理和记录志愿者活动,提高志愿服务的整体水平。同时,该系统也为广大志愿者提供了一个展示自我、服务社会的平台。

    turbo均衡算法研究

    turbo均衡算法研究

    静态编译的Qt6.7.3(win10+MSVC2022+openssl+静态运行时) part01

    https://blog.csdn.net/aggs1990/article/details/143491823 静态编译的Qt6.7.3(win10+MSVC2022+openssl+静态运行时) 压缩包比较大,这是第一部分

Global site tag (gtag.js) - Google Analytics