`
mikom_l
  • 浏览: 15346 次
  • 性别: 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  
额....被你雷到了..楼主

相关推荐

    使用T-SQL语句实现简单查询.pptx

    使用T-SQL语句实现简单查询 在本节中,我们将学习使用T-SQL语句实现简单查询。T-SQL语句是一种关系数据库管理系统的查询语言,广泛应用于数据库管理和数据分析领域。 一、T-SQL语句的基本结构 T-SQL语句的基本...

    Delphi adoquery处理多条SQL语句

    将多条 SQL 语句组合成一个字符串 示例代码展示了如何构建一个包含多条 SQL 语句的字符串: ```delphi var sqlStr: String; begin sqlStr := 'BEGIN'; sqlStr := sqlStr + 'UPDATE Table1 SET Col1=''test'' ...

    常用SQL语句组合实例集锦

    在数据库管理领域,SQL...通过学习和实践这些SQL语句组合,您可以更好地管理数据库,执行复杂的查询,优化数据处理,以及实现更高效的数据分析。记得在实际应用中结合具体情况灵活运用这些知识点,以满足各种需求。

    SQL语句SQL语句.zip

    在这个名为“SQL语句SQL语句.zip”的压缩包中,包含了一个名为“SQL语句.sql”的文件,很可能是包含了一系列SQL查询和其他数据库操作的脚本。 SQL主要分为以下几个部分: 1. 数据查询(DQL):这是SQL最基础的功能...

    oracle监听执行sql语句

    上述查询可以找出磁盘读取次数最多的前10条SQL语句。这有助于快速定位那些对I/O资源消耗较大的SQL语句。 3. **监控I/O消耗最大的会话** ```sql SELECT se.sid, se.serial#, pr.spid, se.username, se.status, ...

    50条常用的sql语句

    根据给定文件的信息,我们可以提炼出一系列SQL语句的关键知识点,这些语句主要涉及SQL Server数据库的操作,包括数据查询、汇总、更新等常见任务。以下是针对每个语句的详细解释: 1. **比较两个课程成绩**:这个...

    关于SQL Server SQL语句查询分页数据的解决方案

    关于SQL Server SQL语句查询分页数据的解决方案 在日常工作中,我们经常需要处理大量数据,并从中获取特定页面的数据。特别是在Web应用开发中,为了提高用户体验,通常会将数据进行分页显示。针对这一需求,本文将...

    数据库SQL语句讲解.pptx

    子查询允许在一条查询语句中嵌套另一条查询语句,以满足更复杂的数据检索需求。 总之,掌握数据库SQL语句是管理和操作数据库系统的关键技能,它涉及从创建和修改表结构,到插入、更新和删除数据,再到编写复杂的...

    SQL数据库 查询语句使用精华

    #### 一、SQL查询语句概述与基本结构 SQL(Structured Query Language)是一种用于管理关系型数据库的标准语言。它主要用于执行查询、更新数据、创建新表、索引以及视图等操作。本文将详细介绍SQL查询语句的基本...

    一条sql语句关联八个表

    标题中的"一条sql语句关联八个表"涉及到的就是这种复杂的联接查询。这种查询通常用于从分布在不同表中的相关数据中提取所需信息。下面我们将深入探讨这个主题。 首先,我们了解SQL的基本联接类型: 1. **INNER ...

    解决python 执行sql语句时所传参数含有单引号的问题

    在例子中,作者创建了一个DataFrame `a`,包含了多个列的比较条件,然后通过遍历列和值,构建了一条包含多个条件的AND连接的SQL WHERE子句。这个过程包括以下几个步骤: 1. 遍历DataFrame的列(columns),将每列的...

    使用Oracle查询并删除重复记录的SQL语句

    使用Oracle查询并删除重复记录的SQL语句 在实际应用中,删除重复记录是非常常见的操作,特别是在数据导入、数据整合和数据清洁等场景中。Oracle数据库提供了多种方式来查询和删除重复记录,本文将详细介绍这些方法...

    SQL查询语句精华.txt

    在SQL语言中,基本的查询操作主要通过`SELECT`语句实现。通过不同的条件组合,可以满足各种复杂的数据检索需求。 **1. 选择列:** - **语法格式:** `SELECT column_name, column_name FROM table_name;` - **示例...

    sql查询语句大全

    ### SQL 查询语句大全知识点详解 #### 一、简单查询 简单查询主要涉及选择列表、FROM 子句和 WHERE 子句三个基本组成部分。 ##### (一)选择列表 选择列表指定了查询的具体列,可以是单个列名、多个列名、星号...

    50个基本SQL语句

    1. 第一条SQL语句通过两个子查询比较了"001"课程和"002"课程的成绩,找出成绩更高的学生。 2. 第二条语句使用`avg()`函数计算平均成绩并用`having`子句筛选出平均成绩超过60分的学生。 3. 第三条语句使用`left outer...

    sql查询重复记录语句

    第二种方法旨在查询并显示每组重复记录中的一条,这通常用于初步识别哪些记录存在重复问题。具体实现如下: ```sql SELECT * FROM HZT WHERE ID IN (SELECT MAX(ID) FROM HZT GROUP BY Title); ``` 这里,我们...

    数据库SQL语句大全

    向table1表中插入一条新的记录,field1和field2是列的名称,value1和value2是插入的值。 3. 删除语句:DELETE FROM table1 WHERE 范围 删除table1表中的记录,并且满足WHERE子句的条件。 4. 更新语句:UPDATE ...

    经典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查询语句学习实例

    ### SQL查询语句学习实例详解 ...通过以上分析,我们可以看出,SQL查询不仅可以帮助我们快速获取所需的数据,还能通过组合多种查询技术实现复杂的数据分析需求。希望这些示例能帮助初学者更好地理解和掌握SQL查询技巧。

    SQL语句大全

    例如,向名为`students`的表中添加一条新的学生信息: ```sql INSERT INTO students (name, age, gender) VALUES ('张三', 20, '男'); ``` 2. **数据删除(DELETE)** 删除表中的记录使用`DELETE FROM`语句。...

Global site tag (gtag.js) - Google Analytics