sqljep的简单使用;
·下载sqljep
http://sqljep.sourceforge.net/
SQLJEP 是一个用来解析和仿真执行SQL语句的Java类库;通俗点解释就是sql语句的过滤条件,用java类实现;
我这里写两个简单的例子给大家看下;
sql语句如下:
create table test (id integer(10) not null auto_increment, sum integer(10) , SALE_DATE TIMESTAMP , primary key(id));
insert into test (sum, SALE_DATE) value (101,now());
insert into test (sum, SALE_DATE) value (102,now());
insert into test (sum, SALE_DATE) value (99,now());
insert into test (sum, SALE_DATE) value (100,now());
对sql执行的结果集判断
//jdbc执行得到的结果集
ResultSet rs = stmt.executeQuery("SELECT ID,SUM,SALE_DATE from test");
//对结果集增加的过滤条件,也可以理解为对 上面sql增加的where条件
ResultSetJEP sqljep2 = new ResultSetJEP("ID in (1,2,3) and SUM>100 and SALE_DATE>(to_date('2011-02-03','yyyy-mm-dd')-7)" );
try {
//对rs这个结果集按照sqljep条件判断
sqljep2.parseExpression(rs);
while (rs.next()) {
//打印将对应的结果集判断的结果
System.out.println(sqljep2.getValue());
}
}
catch (ParseException e) {
e.printStackTrace();
}
控制台结果:
true
true
false
false
对Comparable[]的结果集判断
Comparable[] row1 = {1,101,new java.sql.Timestamp(System.currentTimeMillis())};
Comparable[] row2 = {2,102,new java.sql.Timestamp(System.currentTimeMillis())};
Comparable[] row3 = {3,99,new java.sql.Timestamp(System.currentTimeMillis())};
Comparable[] row4 = {4,100,new java.sql.Timestamp(System.currentTimeMillis())};
//初始数据
Object[] arrComp = new Object[]{row1,row2,row3,row4};
//对判断的数组设置名称
HashMap<String,Integer> columnMapping = new HashMap<String,Integer>();
columnMapping.put("ID",0);
columnMapping.put("SUM",1);
columnMapping.put("SALE_DATE",2);
//对Comparable[]增加的过滤条件
RowJEP sqljep = new RowJEP("ID in (1,2,3) and SUM>100 and trunc(SALE_DATE) < to_date('2012-04-03','yyyy-mm-dd') ");
try {
//对columnMapping按照sqljep条件判断
sqljep.parseExpression(columnMapping);
for(Object com : arrComp)
{
Comparable[] row = (Comparable[]) (com) ;
//打印将对应的row判断的结果
System.out.println(sqljep.getValue(row));
}
}
catch (ParseException e) {
e.printStackTrace();
}
控制台结果:
true
true
false
false
下面这段代码是官方给出的代码;其实是有问题的;
ResultSet rs = statement.excute("SELECT ID,SUM,SALE_DATE from test");
ResultSetJEP sqljep = new ResultSetJEP("ID in (1,2,3) and SUM>100 and SALE_DATE>trunc(sysdate)-7");
try {
sqljep.addConstant("sysdate", new java.util.Date());
sqljep.parseExpression(rs);
whille (rs.next()) {
System.out.println(sqljep.getValue());
}
}
catch (ParseException e) {
e.printStackTrace();
}
上面两个例子都是我测试通过的;
我这里还是说明下,我这里跑官方给出的例子是有bug的;
分享到:
相关推荐
3. **自定义函数支持**:SQLJEP允许用户注册自定义函数,这意味着开发者可以扩展SQLJEP以支持特定的应用场景或业务逻辑,比如使用自己的计算方法或数据处理函数。 4. **表达式评估**:在构建的AST上,SQLJEP能够...
基于java的开发源码-SQL解析类库 SQLJEP.zip 基于java的开发源码-SQL解析类库 SQLJEP.zip 基于java的开发源码-SQL解析类库 SQLJEP.zip 基于java的开发源码-SQL解析类库 SQLJEP.zip 基于java的开发源码-SQL解析类库 ...
6. **API友好**:SQLJEP提供了易于使用的Java API,使得开发者能够快速集成到现有的项目中,减少开发工作量。 7. **性能优化**:由于SQLJEP在内存中处理SQL,相比于通过数据库引擎进行解析,可能在某些场景下提供更...
示例代码是学习如何使用SQLJEP的好途径,它们展示了如何解析SQL、执行表达式以及处理自定义函数等功能。 总的来说,SQLJEP为Java开发者提供了一种强大的工具,使他们能够在Java应用程序中无缝集成和解析SQL,提升了...
使用SQLJEP时,开发者首先需要将`sqljep-0.2`库引入项目。然后,可以通过API来创建`SqlEnvironment`实例,设置数据库元数据,注册自定义函数,最后使用`SqlParser`来解析SQL字符串并生成`SqlNode`对象。这个对象可以...
使用SQLJEP库,你可以: 1. **SQL语句解析**:将用户输入的SQL字符串转化为可操作的对象模型,这使得你可以检查SQL的语法是否正确,或者提取特定的查询元素。 2. **安全评估**:在执行SQL之前,可以通过AST来检查...
1. **SQLJEP的使用**:通过SQLJEP,开发者可以创建一个`SQLContext`对象,该对象负责管理SQL解析所需的环境,如数据表、列名等。然后,你可以使用`parse()`方法解析SQL语句,并得到一个`Expression`对象。这个对象...
JAVA源码SQL解析类库SQLJEPJAVA源码SQL解析类库SQLJEP
java资源SQL解析类库 SQLJEPjava资源SQL解析类库 SQLJEP提取方式是百度网盘分享地址
基于Java的实例开发源码-SQL解析类库 SQLJEP.zip
SQLJEP是一个开源的Java库,专门用于解析和执行SQL查询。这个库为开发者提供了一种方式,将SQL语句嵌入到Java程序中,并能够动态地构建和执行这些语句,无需预先编译。SQLJEP源码的分析可以帮助我们深入理解SQL解析...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
SQLJEP是用于解析和评估类似SQL的表达式(不支持SQL语句)的Java API。 它支持谓词之间的“ is null”。 它包含几乎所有Oracle和MaxDB的功能。 例如to_char,to_number,to_date,de
7. **使用与维护**:安装完成后,Amoeba作为数据库中间件运行,监听并处理来自应用的SQL请求。为了监控和优化系统性能,用户需要定期查看Amoeba的日志,调整配置参数,并进行必要的性能测试。 8. **优势与挑战**:...
与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。 Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...