在做数据库统计分析开发过程中,我们经常会碰到复杂条件组合查询的问题,其特点是:检索字段是固定(就是显示结果集的字段),但查询的条件是多变的,体现在各个字段的条件任意自由组合。如果为每一次组合情况编写一个SQL查询语句的话,显然是一件费时费力的乏味活。BJAF框架为了解决这样一个问题,实现了一个复杂条件组合查询器CompositeQueryOperator。它支持查询条件的任意组合,动态构建SQL语句,让你乏味而啰嗦的复杂条件查询开发过程解脱出来。
CompositeQueryOperator的类图如下:
从图可见,CompositeQueryOperator继承自QueryOperator查询器,所以它使用方式基本上与QueryOperator保持一致。它只是多了一个addParameter方法来构建各种组合的条件。示例如下:
以图2-6的EMP表为例,从图可知表EMP的字段有(EMPNO、ENAME、JOB、MGR、 HIREDATE、SAL、COMM 和DEPTNO)假设需要按以上各个字段自由组合来查询EMP表的数据。
典型的条件组合界面类似下图所示:
如果按照传统作法,对上面的每种组合编写一个SQL语句,显然会脑瘫的:-),复杂组合查询器CompositeQueryOperator的引入,只要下面简单代码即可解决问题:
package test.persistence;
import java.math.BigDecimal;
import java.sql.Timestamp;
import com.beetle.framework.persistence.access.operator.RsDataSet;
import com.beetle.framework.persistence.composite.CompositeQueryOperator;
public class TestSQL {
public static void main(String[] args) {
String EMPNO = null;// 设置参数(从页面获取输入参数)
String ENAME = null;
String JOB = null;
BigDecimal MGR = null;
Timestamp HIREDATE = null;
BigDecimal SAL_1 = null;
BigDecimal SAL_2 = null;
BigDecimal COMM = null;
BigDecimal DEPTNO = null;
CompositeQueryOperator cqo = new CompositeQueryOperator();
cqo.setDataSourceName("SYSDATASOURCE_DEFAULT");// 数据数据源
cqo.setSql("select * from emp");// 数据查询语句(只填显示字段select部分,无需写where子句)
cqo.addParameter("EMPNO", "=", EMPNO);// 添加各种组合条件字段
cqo.addParameter("ENAME", "=", ENAME);
cqo.addParameter("JOB", "=", JOB);
cqo.addParameter("MGR", "=", MGR);
cqo.addParameter("HIREDATE", ">", HIREDATE);
cqo.addParameter("SAL", ">=", SAL_1);
cqo.addParameter("SAL", "<=", SAL_2);
cqo.addParameter("COMM", "=", COMM);
cqo.addParameter("DEPTNO", "=", DEPTNO);
cqo.access();// 执行查询
if (cqo.resultSetAvailable()) {// 处理结果,处理结果请参考QueryOperator,这里只是打印出来
RsDataSet rs = new RsDataSet(cqo.getSqlResultSet());
for (int i = 0; i < rs.rowCount; i++) {
for (int j = 0; j < rs.colCount; j++) {
System.out.println(rs.getFieldValue(j));
}
rs.next();
System.out.println("--");
}
}
}
}
可见,一切变得很简单。
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
值得注意的是,当某个条件参数不参与检索查询,则此参数应设置为null而不是空字符””,当然,你也可以把这个参数注释掉。
<!--EndFragment-->
<!--EndFragment-->
- 大小: 8.6 KB
- 大小: 9.4 KB
分享到:
相关推荐
Beetle J2ee Application Framework(BJAF)一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可扩展、灵活缩放的高质量企业应用系统提供了一套...
BJAF(beetle-j2ee-application-framework)甲壳虫J2EE应用开发框架代码&开发指南 甲壳虫,一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可...
beetle 开源框架书的源码 beetle 开源框架书的源码
已经成功应用于多个高并发量的TCP、UDP框架通信接口,
X协议解析测试程序,服务器和客户端都有,字数字数字数
Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle....
BAS: Beetle Antennae Search Algorithm for Optimization Problems。 论文英文原文。
有需要的朋友就下吧
软件测试的利器。 最新版本请到这下载www.popular-soft.com/beetle/zh-cn/
甲壳虫 PSX 剧本Beetle PSX 是 Mednafen 的 PSX 模块到 libretro API 的端口/分支。 可以用C++98模式编译,不... 要使用硬件渲染器支持make HAVE_HW=1构建,请运行make HAVE_HW=1 。 在硬件和非硬件版本之间切换时需要m
在使用上传统Socket编写tcp应虽然不是复杂但写起来也是件麻烦的事情,还要处理分包和粘包上的问题。但beetle都解决了以上问题,所有操作都是基于方法和事件来实现,只需要在便建一个对象简单的绑定一个事件就能完成...
Python从零开始,一点一滴学习爬虫。-dung_beetle
c#传输文件传输用到的类, 听说效率不错,具体没用过
Beetle 是可扩展的,这意味着您不必被迫使用某种标记语言,而是可以找到(或编写)一个插件,使您能够使用自己喜欢的标记语言,安装它,告诉 Beetle 并关闭它你去! 我编写了一些插件来帮助我入门: ,用于渲染 ...
type-errors-pretty::lipstick::lady_beetle:组合器,可轻松编写漂亮的类型错误
scratch编程项目源代码文件案例素材-Beetle.zip
数据操作的jar包,包括oracle/mssql,通用~
适用于Chrome的高清版19张adung甲虫图像新标签页。 粪便甲虫是部分或完全以粪便为食的甲虫。 一头甲虫可以在一个晚上掩埋比自己重250倍的粪便。 许多被称为“滚子”的粪便甲虫会将粪便滚成圆球,用作食物来源或繁殖...
使用submissionid查询题解 使用示例: LeetCodeHelper是一个帮助类,帮助使用者用于和LeetCode交互,具体的使用方法可以看test中的使用方法 实例化帮助类LeetCodeHelper:gear: 三个参数分别用来用于发起http请求,...
Beetle J2ee Application Framework(BJAF)一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可扩展、灵活缩放的高质量企业应用系统提供了一套...