`
mikom_l
  • 浏览: 14877 次
  • 性别: Icon_minigender_1
  • 来自: 福州
最近访客 更多访客>>
社区版块
存档分类
最新评论

只有一条sql语句实现组合查询

    博客分类:
  • J2se
 
阅读更多

 

/**
* User表中的id字段
*/

String ID = "id";

String AGE = "age";



/**
* 用户输入的值,根据是否为空字符串实现组合查询
*/

String id = 

String strAge1 = 

String strAge2 =



/**
* 条件判断
*/

int age1;

int age2;

if("".equals(id)){

	ID = id = "1";
}

if("".equals(strAge1)){
	
	age1= MIN;				// MIN常量这里定义为0

}else{

	age1 = Integer.parseInt(strAge1);
}

if("".equals(strAge2)){

	age2 = MAX				// MAX常量这里定义为150

}else{

	age2 = Integer.parseInt(strAge2);
}



/**
* sql语句
*/

String sqlStr =

 "select * from User where"+

	 ID + "= '"+id+"' and"+ 

	AGE +">= "+ age1+" and"+ 

	AGE +"<= "+ age2;

 

想当初为了实现组合查询,写了n条sql语句... 

 

 

分享到:
评论
17 楼 mikom_l 2010-05-03  
sarin 写道
楼主先接受接受SQL吧,别着急SSH


感觉自己的基础的确不太牢固~但学校有开SSH这门课
16 楼 moses3017 2010-05-03  
个人有自己的习惯和公司要求吧
本人不太喜欢用hibernate写出连自己都看不懂的sql,这样的sql效率如何控制呢。也许是本人的hibernate比较菜
15 楼 sarin 2010-05-03  
楼主先接受接受SQL吧,别着急SSH
14 楼 icanfly 2010-05-03  
最近为项目写了一个单表简单查询:
Where where = new Where("name = ? and age > ?","zhangsan",23);
List<User> u = wrapper.select(User.class,where)
感觉这种方式比用Criteria 更加一目了然查询条件,而且结果实体类进行自动映射转换。
13 楼 zhao103804 2010-05-03  
CodingMouse 写道
我也是菜菜地模拟了一个Criteria类,像下面这样的调用:

/**
 * 模拟一个 Criteria 条件处理器。
 * 
 * @author CodingMouse
 * @version 1.0
 * @since JDK1.5
 */
public class Test {

	public static void main(String[] args) {
		
		Criteria ci = Criteria.select(AccountPOJO.class)
		.add(Restrictions.or(Restrictions.eq("accountid", 10),
			Restrictions.isNull("birthday"),
			Restrictions.like("accountname", "邓%")))
		.add(Restrictions.le("accountid", 60),
			Restrictions.like("accountname", "周%"))
		.add(Restrictions.or(Restrictions.and(
			Restrictions.notLike("email", "%gmail.com"), 
			Restrictions.ge("onlinecount", 10))))
		.addOrder(Order.desc("accountstate"),
			Order.asc("onlinecount"));
		
		List<Object> modelList = ci.query();
		
		for (Object model : modelList) {
			System.out.println(model);
		}
		
	}
	
}


最终生成这样的SQL语句,目前还没加上别名、联接查询的支持:

SELECT accountid, accountname, onlinecount, birthday, loginname, loginpassword, email, accountstate FROM account WHERE (accountid = ? OR birthday IS NULL OR accountname LIKE (?)) AND (accountid <= ? AND accountname LIKE (?)) OR (email NOT LIKE (?) AND onlinecount >= ?) ORDER BY accountstate DESC, onlinecount


所以,我也建议楼主自行封装几个类来实现SQL自动拼装和参数转换赋值。当然,如果你不用POJO,那这个思路就行不通。



add(Restrictions.le("accountid", 60),  
17.            Restrictions.like("accountname", "周%")) 
可以改成這樣
add(Restrictions.le("accountid", 60),  
17.            Restrictions.like("accountname", "周",MatchMode.END))
12 楼 mikom_l 2010-05-03  
谢谢楼上各位~

是我自己没考虑完全

目前刚开始接触SSH框架,搞得自己晕乎乎的~
11 楼 lonlyleo 2010-05-03  
呵呵,思路挺正常啊。只是没有避免注入攻击而已
一眼能看懂多好啊

查询器适合用来组装复杂查询,也就是平常你总和用户忽悠所说的"高级查询",呵呵
10 楼 sing4j 2010-05-03  
  可能楼主正在学习阶段,应该鼓励。
  虽然这个语句存在很多问题,确实是比较基础的东西。
  继续努力。
9 楼 cnyangqi 2010-05-03  
CodingMouse你不菜了,他不会你会的Hibernate^^
8 楼 captmjc 2010-05-02  
mikom_l 写道
不对吗~各位

一个原始人,拿着石斧,对着美国大兵说:“我这不是武器吗?”
7 楼 icanfly 2010-05-02  
CodingMouse 写道
我也是菜菜地模拟了一个Criteria类,像下面这样的调用:

/**
 * 模拟一个 Criteria 条件处理器。
 * 
 * @author CodingMouse
 * @version 1.0
 * @since JDK1.5
 */
public class Test {

	public static void main(String[] args) {
		
		Criteria ci = Criteria.select(AccountPOJO.class)
		.add(Restrictions.or(Restrictions.eq("accountid", 10),
			Restrictions.isNull("birthday"),
			Restrictions.like("accountname", "邓%")))
		.add(Restrictions.le("accountid", 60),
			Restrictions.like("accountname", "周%"))
		.add(Restrictions.or(Restrictions.and(
			Restrictions.notLike("email", "%gmail.com"), 
			Restrictions.ge("onlinecount", 10))))
		.addOrder(Order.desc("accountstate"),
			Order.asc("onlinecount"));
		
		List<Object> modelList = ci.query();
		
		for (Object model : modelList) {
			System.out.println(model);
		}
		
	}
	
}


最终生成这样的SQL语句,目前还没加上别名、联接查询的支持:

SELECT accountid, accountname, onlinecount, birthday, loginname, loginpassword, email, accountstate FROM account WHERE (accountid = ? OR birthday IS NULL OR accountname LIKE (?)) AND (accountid <= ? AND accountname LIKE (?)) OR (email NOT LIKE (?) AND onlinecount >= ?) ORDER BY accountstate DESC, onlinecount


所以,我也建议楼主自行封装几个类来实现SQL自动拼装和参数转换赋值。当然,如果你不用POJO,那这个思路就行不通。


这样写sql比直接写sql还难看。你能在十秒钟内看明白是查询什么东西吗。恐怕很困难。。。这个完全是为了查询而查询了。比较汗
6 楼 glamey 2010-05-02  
写的确实不咋的。
5 楼 J-catTeam 2010-05-02  
是对的,但是可能比较基础
,并且sql没有防止注入
4 楼 CodingMouse 2010-05-02  
我也是菜菜地模拟了一个Criteria类,像下面这样的调用:

/**
 * 模拟一个 Criteria 条件处理器。
 * 
 * @author CodingMouse
 * @version 1.0
 * @since JDK1.5
 */
public class Test {

	public static void main(String[] args) {
		
		Criteria ci = Criteria.select(AccountPOJO.class)
		.add(Restrictions.or(Restrictions.eq("accountid", 10),
			Restrictions.isNull("birthday"),
			Restrictions.like("accountname", "邓%")))
		.add(Restrictions.le("accountid", 60),
			Restrictions.like("accountname", "周%"))
		.add(Restrictions.or(Restrictions.and(
			Restrictions.notLike("email", "%gmail.com"), 
			Restrictions.ge("onlinecount", 10))))
		.addOrder(Order.desc("accountstate"),
			Order.asc("onlinecount"));
		
		List<Object> modelList = ci.query();
		
		for (Object model : modelList) {
			System.out.println(model);
		}
		
	}
	
}


最终生成这样的SQL语句,目前还没加上别名、联接查询的支持:

SELECT accountid, accountname, onlinecount, birthday, loginname, loginpassword, email, accountstate FROM account WHERE (accountid = ? OR birthday IS NULL OR accountname LIKE (?)) AND (accountid <= ? AND accountname LIKE (?)) OR (email NOT LIKE (?) AND onlinecount >= ?) ORDER BY accountstate DESC, onlinecount


所以,我也建议楼主自行封装几个类来实现SQL自动拼装和参数转换赋值。当然,如果你不用POJO,那这个思路就行不通。
3 楼 mikom_l 2010-05-01  
不对吗~各位
2 楼 icanfly 2010-05-01  
楼主要是女的并且长得真的是金泰熙那么漂亮我就就忍了。but你太让我伤心了。
1 楼 huangjin871218 2010-05-01  
额....被你雷到了..楼主

相关推荐

    经典SQL语句大全

    1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + ...

    精通sql结构化查询语句

    5.5.3 修改视图的语句结构 5.5.4 重命名视图的名称 5.5.5 使用SQL语句修改视图 5.5.6 删除视图的语句结构 5.5.7 使用SQL语句删除视图 5.6 视图的应用 5.6.1 利用视图简化表的复杂连接 5.6.2 利用视图简化复杂查询 ...

    经典全面的SQL语句大全

     13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段  14、说明:...

    超实用sql语句

    13、说明:一条sql 语句搞定数据库分页 select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 具体实现: ...

    sql经典语句一部分

    1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + ...

    T-SQL高级查询

    compute进行汇总前面是查询的结果,后面一条结果集就是汇总的信息。compute子句中可以添加多个汇总表达式,可以添加的信息如下: a、 可选by关键字。它是每一列计算指定的行聚合 b、 行聚合函数名称。包括sum、...

    SQLServer中如何将一个字段的多个记录值合在一行显示

    SQLServer中如何将一个字段的多个记录值合在一行显示

    数据库操作语句大全(sql)

    1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' +...

    SQL查询技巧(范例宝典)

     实例339 利用聚合函数First或Last求数据表中第一条或最后一条记录 496  10.11 多表查询(连接查询) 498  实例340 利用FROM子句进行多表查询 498  实例341 使用表别名 499  实例342 合并多个结果集...

    SqlServer 表单查询问题及解决方法

    Q1:表StudentScores如下,用一条SQL语句查询出每门课都大于80分的学生姓名 Q2:表DEMO_DELTE如下,删除除了自动编号不同,其他都相同的学生冗余信息 Q3:Team表如下,甲乙丙丁为四个球队,现在四个球对进行比赛,...

    Oracle 数据库连接查询SQL语句

    内连接(inner join)。 外连接: 全连接(full join)、左连接(left join)、右连接(right join)。 交叉联接(cross join)。 外连接与内连接不一样,外连接返回的查询结果中... SQL语句如下: select * from mt_pb_

    SQL语法大全

    rs.open SQL语句,conn,3,2 3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\'...

    2009达内SQL学习笔记

    多数DBMS不需要在单条SQL语句后加分号,但特定的DBMS可能必须在单条SQL语句后加分号。 SQL语句的最后一句要以 “;”号结束 二、写子句顺序 Select column,group_function From table [Where condition] ...

    震撼推出超方便实用的Oracle开发工具 - Oracle SQL Handler,双语界面,智能SQL编辑器,免装Oracle客户端,能运行于Windows, 双语界面

    支持批量SQL语句的运行:用监控器监控每条语句的运行,在运行过程中可以中断/暂停/继续正在运行的语句 ,甚至可以更正出错误的语句 方便高效的块操作,以满足特殊需求: (1)“Format SQL” 按钮能将语句块中杂乱...

    SQL性能优化

     以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的...

    PL/SQL Developer8.04官网程序_keygen_汉化

     2 隐式游标 所有的隐式游标都被假设为只返回一条记录。 使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。  例如: ……. SELECT studentNo,studentName INTO curStudentNo...

    PL/SQL 基础.doc

    PL/SQL 基础,一个不错的 PL/SQL 参考手册。内容预览: ---- 第一章 PL/SQL 简介 ---- 1. Oracle应用编辑方法概览 1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和...

    程序员的SQL金典

    第4章对Select 语句进行全面的介绍,对模糊匹配、分组、限制数据条数、计算字段、组合查询等高级内容进行了重点的讲解;第5章介绍常用的数据库函数以及它们在主流DBMS中的实现差异;第6章介绍索引与约束等知识点;第...

    Oracle开发工具 - Oracle SQL Handler(功能强大,超方便好用, 免装客户端, Windows / Linux)

    支持批量SQL语句的运行:用监控器监控每条语句的运行,在运行过程中可以中断/暂停/ 继续正在运行的语句,甚至可以更正出错误的语句 方便高效的块操作,以满足特殊需求: (1)“Format SQL” 按钮能将语句块中杂乱...

    《程序员的SQL 金典》

    限制数据条数、计算字段、组合查询等高级内容进行了重点的讲解;第5 章介绍常用的数据 库函数以及它们在主流DBMS中的实现差异;第6章介绍索引与约束等知识点;第7、8章 分别介绍表连接、子查询等高级查询技术;第9 ...

Global site tag (gtag.js) - Google Analytics