`
HenryYu
  • 浏览: 29336 次
  • 性别: 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics