当前位置: 代码迷 >> SQL >> sqljep的运用,例子
  详细解决方案

sqljep的运用,例子

热度:32   发布时间:2016-05-05 13:45:28.0
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的;
  相关解决方案