在做数据库统计分析开发过程中,我们经常会碰到复杂条件组合查询的问题,其特点是:检索字段是固定(就是显示结果集的字段),但查询的条件是多变的,体现在各个字段的条件任意自由组合。如果为每一次组合情况编写一个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体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可扩展、灵活缩放的高质量企业应用系统提供了一套...
【标题】"beetle 开源框架书的源码"涉及的是一个名为"beetle"的开源框架的源代码,这通常意味着该框架可能是用于Java平台,因为J2EE(Java 2 Platform, Enterprise Edition)是Java领域广泛使用的开发企业级应用的...
标题中的"Beetle.JT808-master.zip"表明这是一个关于JT808协议的开源项目,由Beetle框架实现,且基于C#编程语言。Beetle是一个通用的通讯框架,而JT808则是一种广泛应用于中国GPS监控系统中的通信协议。这个项目可能...
BJAF(beetle-j2ee-application-framework)甲壳虫J2EE应用开发框架代码&开发指南 甲壳虫,一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可...
已经成功应用于多个高并发量的TCP、UDP框架通信接口,
### 德利多富(Wincor Nixdorf) BEETLE_XL_II 收款机说明书 #### 概述 德利多富(Wincor Nixdorf) BEETLE_XL_II是一款模块化的POS系统,专为零售业设计。这款收款机不仅功能强大,而且具备高度的灵活性和可扩展性,...
在C#编程中,"Beetle"可能指的是一个自定义的框架或库,用于处理文件传输任务。这个框架可能是为了提高文件传输的效率而设计的。在标题中提到的"beetle类包含其他类",这暗示了Beetle可能是一个封装了多种功能的类库...
Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle....
天牛须算法(Beetle Antennae Search Algorithm,简称BAS),是一种新型的智能优化算法,它以长角天牛的搜索行为为灵感而设计。长角天牛因其长长的触须而著名,这些触须常常比它们的身体还要长。BAS算法模拟了这些...
"Popular Beetle"是一款专业的数据库比较和数据整合工具,专为软件测试人员设计,旨在提高工作效率并确保数据的一致性。该工具提供了强大的功能,能够帮助用户深入对比不同数据库之间的结构差异,同时支持数据的同步...
-dung_beetle.zip" 是一个压缩包,其中包含了一个名为 "dung_beetle-master" 的文件夹,这很可能是项目的源代码目录,通常包括教程的实例、脚本和其他相关资源。让我们逐步了解Python爬虫的基本概念和常用工具。 1....
甲壳虫 PSX 剧本Beetle PSX 是 Mednafen 的 PSX 模块到 libretro API 的端口/分支。 可以用C++98模式编译,不... 要使用硬件渲染器支持make HAVE_HW=1构建,请运行make HAVE_HW=1 。 在硬件和非硬件版本之间切换时需要m
在函数式编程中,组合器是一种可以将小的、简单的函数组合成更复杂功能的工具。这里的组合器允许开发者自定义类型错误的格式和展示方式,使得在编译时出现的错误信息更加直观和易读。 Haskell的强类型系统使得类型...
标题中的“c#_以Beetle为基础SOCKET服客端(WPF)与客户端(winphone\win8 metro)”指的是一个使用C#编程语言构建的网络通信应用,它基于Beetle框架,实现了SOCKET服务器端(WPF)以及Windows Phone和Windows 8 Metro...
至于“keracce-Beetle-9cc3275”,这可能是一个源代码库的特定版本标识,比如Git仓库的一个分支或者标签。这个名称可能指的是Beetle项目的作者或者一个特定的开发迭代。要深入理解这个项目,你需要解压这个压缩包并...
Beetle 是可扩展的,这意味着您不必被迫使用某种标记语言,而是可以找到(或编写)一个插件,使您能够使用自己喜欢的标记语言,安装它,告诉 Beetle 并关闭它你去! 我编写了一些插件来帮助我入门: ,用于渲染 ...
蜣螂优化算法(DBO,Dung Beetle Optimization Algorithm)是一种基于生物行为的新型全局优化算法,灵感来源于蜣螂(也称屎壳郎)在寻找食物过程中所展现出的探索和滚动粪球的行为。2022年底,该算法被首次提出,并...
在使用上传统Socket编写tcp应虽然不是复杂但写起来也是件麻烦的事情,还要处理分包和粘包上的问题。但beetle都解决了以上问题,所有操作都是基于方法和事件来实现,只需要在便建一个对象简单的绑定一个事件就能完成...
标注类别名称:["Cashew-anthracnose","Cashew-healthy","Cashew-leaf-miner","Cassava-bacterial-blight","Cassava-brown-spot","Cassava-healthy","Maize-healthy","Maize-leaf-beetle","Maize-leaf-blight",...
蜣螂优化算法(Dung Beetle Optimizer,DBO)是一种新兴的生物启发式全局优化算法,源于自然界中蜣螂寻找粪球的行为。该算法在解决单目标优化问题时展现出高效性和适应性,尤其适用于复杂的非线性问题。下面将详细...