`
zzzsmail
  • 浏览: 7627 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

sqljep的使用,例子

阅读更多
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的;
分享到:
评论

相关推荐

    SQL解析类库 SQLJEP

    3. **自定义函数支持**:SQLJEP允许用户注册自定义函数,这意味着开发者可以扩展SQLJEP以支持特定的应用场景或业务逻辑,比如使用自己的计算方法或数据处理函数。 4. **表达式评估**:在构建的AST上,SQLJEP能够...

    基于java的开发源码-SQL解析类库 SQLJEP.zip

    基于java的开发源码-SQL解析类库 SQLJEP.zip 基于java的开发源码-SQL解析类库 SQLJEP.zip 基于java的开发源码-SQL解析类库 SQLJEP.zip 基于java的开发源码-SQL解析类库 SQLJEP.zip 基于java的开发源码-SQL解析类库 ...

    SQL解析类库 SQLJEP.7z

    6. **API友好**:SQLJEP提供了易于使用的Java API,使得开发者能够快速集成到现有的项目中,减少开发工作量。 7. **性能优化**:由于SQLJEP在内存中处理SQL,相比于通过数据库引擎进行解析,可能在某些场景下提供更...

    基于Java的SQL解析类库 SQLJEP.zip

    示例代码是学习如何使用SQLJEP的好途径,它们展示了如何解析SQL、执行表达式以及处理自定义函数等功能。 总的来说,SQLJEP为Java开发者提供了一种强大的工具,使他们能够在Java应用程序中无缝集成和解析SQL,提升了...

    java源码:SQL解析类库 SQLJEP.zip

    使用SQLJEP时,开发者首先需要将`sqljep-0.2`库引入项目。然后,可以通过API来创建`SqlEnvironment`实例,设置数据库元数据,注册自定义函数,最后使用`SqlParser`来解析SQL字符串并生成`SqlNode`对象。这个对象可以...

    基于java的SQL解析类库 SQLJEP.zip

    使用SQLJEP库,你可以: 1. **SQL语句解析**:将用户输入的SQL字符串转化为可操作的对象模型,这使得你可以检查SQL的语法是否正确,或者提取特定的查询元素。 2. **安全评估**:在执行SQL之前,可以通过AST来检查...

    基于Java的实例源码-SQL解析类库 SQLJEP.zip

    1. **SQLJEP的使用**:通过SQLJEP,开发者可以创建一个`SQLContext`对象,该对象负责管理SQL解析所需的环境,如数据表、列名等。然后,你可以使用`parse()`方法解析SQL语句,并得到一个`Expression`对象。这个对象...

    java资源SQL解析类库SQLJEPjava资源SQL解析类库SQLJEP

    java资源SQL解析类库 SQLJEPjava资源SQL解析类库 SQLJEP提取方式是百度网盘分享地址

    基于Java的实例开发源码-SQL解析类库 SQLJEP.zip

    基于Java的实例开发源码-SQL解析类库 SQLJEP.zip

    SQL解析类库 SQLJEP源码

    SQLJEP是一个开源的Java库,专门用于解析和执行SQL查询。这个库为开发者提供了一种方式,将SQL语句嵌入到Java程序中,并能够动态地构建和执行这些语句,无需预先编译。SQLJEP源码的分析可以帮助我们深入理解SQL解析...

    小程序 SQL解析类库 SQLJEP(源码).zip

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    SQLJEP-开源

    SQLJEP是用于解析和评估类似SQL的表达式(不支持SQL语句)的Java API。 它支持谓词之间的“ is null”。 它包含几乎所有Oracle和MaxDB的功能。 例如to_char,to_number,to_date,de

    amoeba-mysql-3.0.5-RC.tar.gz

    7. **使用与维护**:安装完成后,Amoeba作为数据库中间件运行,监听并处理来自应用的SQL请求。为了监控和优化系统性能,用户需要定期查看Amoeba的日志,调整配置参数,并进行必要的性能测试。 8. **优势与挑战**:...

    数据库代理 “变形虫”---amoeba

    与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。  Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    JAVA上百实例源码以及开源项目源代码

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics