`
HenryYu
  • 浏览: 29943 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Beetle框架使用指南之--复杂条件组合查询器

阅读更多

在做数据库统计分析开发过程中,我们经常会碰到复杂条件组合查询的问题,其特点是:检索字段是固定(就是显示结果集的字段),但查询的条件是多变的,体现在各个字段的条件任意自由组合。如果为每一次组合情况编写一个SQL查询语句的话,显然是一件费时费力的乏味活。BJAF框架为了解决这样一个问题,实现了一个复杂条件组合查询器CompositeQueryOperator。它支持查询条件的任意组合,动态构建SQL语句,让你乏味而啰嗦的复杂条件查询开发过程解脱出来。

CompositeQueryOperator的类图如下:

从图可见,CompositeQueryOperator继承自QueryOperator查询器,所以它使用方式基本上与QueryOperator保持一致。它只是多了一个addParameter方法来构建各种组合的条件。示例如下:

以图2-6EMP表为例,从图可知表EMP的字段有(EMPNOENAMEJOBMGR HIREDATESALCOMM 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
0
0
分享到:
评论

相关推荐

    beetle框架

    Beetle J2ee Application Framework(BJAF)一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可扩展、灵活缩放的高质量企业应用系统提供了一套...

    beetle 开源框架书的源码

    【标题】"beetle 开源框架书的源码"涉及的是一个名为"beetle"的开源框架的源代码,这通常意味着该框架可能是用于Java平台,因为J2EE(Java 2 Platform, Enterprise Edition)是Java领域广泛使用的开发企业级应用的...

    Beetle.JT808-master.zip_beetle_beetle c#_beetleX实现订阅_jt808_jt80

    标题中的"Beetle.JT808-master.zip"表明这是一个关于JT808协议的开源项目,由Beetle框架实现,且基于C#编程语言。Beetle是一个通用的通讯框架,而JT808则是一种广泛应用于中国GPS监控系统中的通信协议。这个项目可能...

    BJAF-SDK-2.2.4.rar

    BJAF(beetle-j2ee-application-framework)甲壳虫J2EE应用开发框架代码&开发指南 甲壳虫,一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可...

    高并发量的TCP、UDP框架通信beetle.express.rar_Beetle.Express tls_TCP_UDP_ex

    已经成功应用于多个高并发量的TCP、UDP框架通信接口,

    德利多富(Wincor Nixdorf )BEETLE_XL_II收款机说明书

    ### 德利多富(Wincor Nixdorf) BEETLE_XL_II 收款机说明书 #### 概述 德利多富(Wincor Nixdorf) BEETLE_XL_II是一款模块化的POS系统,专为零售业设计。这款收款机不仅功能强大,而且具备高度的灵活性和可扩展性,...

    beetle类包含其他类

    在C#编程中,"Beetle"可能指的是一个自定义的框架或库,用于处理文件传输任务。这个框架可能是为了提高文件传输的效率而设计的。在标题中提到的"beetle类包含其他类",这暗示了Beetle可能是一个封装了多种功能的类库...

    Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码

    Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle....

    天牛须算法(Beetle Antennae Search Algorithm)论文原文

    天牛须算法(Beetle Antennae Search Algorithm,简称BAS),是一种新型的智能优化算法,它以长角天牛的搜索行为为灵感而设计。长角天牛因其长长的触须而著名,这些触须常常比它们的身体还要长。BAS算法模拟了这些...

    beetle-psx-libretro:Mednafen PSX 到 Libretro API 的独立端口

    甲壳虫 PSX 剧本Beetle PSX 是 Mednafen 的 PSX 模块到 libretro API 的端口/分支。 可以用C++98模式编译,不... 要使用硬件渲染器支持make HAVE_HW=1构建,请运行make HAVE_HW=1 。 在硬件和非硬件版本之间切换时需要m

    popular beetle 数据库比较,数据整合工具

    "Popular Beetle"是一款专业的数据库比较和数据整合工具,专为软件测试人员设计,旨在提高工作效率并确保数据的一致性。该工具提供了强大的功能,能够帮助用户深入对比不同数据库之间的结构差异,同时支持数据的同步...

    Python从零开始,一点一滴学习爬虫。-dung_beetle.zip

    -dung_beetle.zip" 是一个压缩包,其中包含了一个名为 "dung_beetle-master" 的文件夹,这很可能是项目的源代码目录,通常包括教程的实例、脚本和其他相关资源。让我们逐步了解Python爬虫的基本概念和常用工具。 1....

    Beetle.dll

    有需要的朋友就下吧

    type-errors-pretty::lipstick::lady_beetle:组合器,可轻松编写漂亮的类型错误

    在函数式编程中,组合器是一种可以将小的、简单的函数组合成更复杂功能的工具。这里的组合器允许开发者自定义类型错误的格式和展示方式,使得在编译时出现的错误信息更加直观和易读。 Haskell的强类型系统使得类型...

    c#_以Beetle为基础SOCKET服客端(WPF)与客户端(winphone\win8 metro)

    标题中的“c#_以Beetle为基础SOCKET服客端(WPF)与客户端(winphone\win8 metro)”指的是一个使用C#编程语言构建的网络通信应用,它基于Beetle框架,实现了SOCKET服务器端(WPF)以及Windows Phone和Windows 8 Metro...

    Android-Beetle实现通过摇一摇手机就能够轻松地在GitHubGitLab和AzureDevOps上创建Bug报告

    至于“keracce-Beetle-9cc3275”,这可能是一个源代码库的特定版本标识,比如Git仓库的一个分支或者标签。这个名称可能指的是Beetle项目的作者或者一个特定的开发迭代。要深入理解这个项目,你需要解压这个压缩包并...

    beetle:DYI 静态站点生成器

    Beetle 是可扩展的,这意味着您不必被迫使用某种标记语言,而是可以找到(或编写)一个插件,使您能够使用自己喜欢的标记语言,安装它,告诉 Beetle 并关闭它你去! 我编写了一些插件来帮助我入门: ,用于渲染 ...

    蜣螂优化算法 (DBO).rar

    蜣螂优化算法(DBO,Dung Beetle Optimization Algorithm)是一种基于生物行为的新型全局优化算法,灵感来源于蜣螂(也称屎壳郎)在寻找食物过程中所展现出的探索和滚动粪球的行为。2022年底,该算法被首次提出,并...

    Beetle高性能.net socket tcp组件

    在使用上传统Socket编写tcp应虽然不是复杂但写起来也是件麻烦的事情,还要处理分包和粘包上的问题。但beetle都解决了以上问题,所有操作都是基于方法和事件来实现,只需要在便建一个对象简单的绑定一个事件就能完成...

    【目标检测数据集】植物叶片病虫害检测数据集7100张4种植物12个标签VOC+YOLO格式.zip

    标注类别名称:["Cashew-anthracnose","Cashew-healthy","Cashew-leaf-miner","Cassava-bacterial-blight","Cassava-brown-spot","Cassava-healthy","Maize-healthy","Maize-leaf-beetle","Maize-leaf-blight",...

Global site tag (gtag.js) - Google Analytics