论坛首页 Java企业应用论坛

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

浏览 5206 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-04-30   最后修改:2010-04-30

 

/**
* 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语句... 

 

 

   发表时间:2010-05-01  
额....被你雷到了..楼主
0 请登录后投票
   发表时间:2010-05-01  
楼主要是女的并且长得真的是金泰熙那么漂亮我就就忍了。but你太让我伤心了。
0 请登录后投票
   发表时间:2010-05-01  
不对吗~各位
0 请登录后投票
   发表时间:2010-05-02   最后修改: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,那这个思路就行不通。
0 请登录后投票
   发表时间:2010-05-02  
是对的,但是可能比较基础
,并且sql没有防止注入
0 请登录后投票
   发表时间:2010-05-02  
写的确实不咋的。
0 请登录后投票
   发表时间: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还难看。你能在十秒钟内看明白是查询什么东西吗。恐怕很困难。。。这个完全是为了查询而查询了。比较汗
0 请登录后投票
   发表时间:2010-05-02  
mikom_l 写道
不对吗~各位

一个原始人,拿着石斧,对着美国大兵说:“我这不是武器吗?”
0 请登录后投票
   发表时间:2010-05-03  
CodingMouse你不菜了,他不会你会的Hibernate^^
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics