`
free_zhou
  • 浏览: 52109 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JDBC 处理sql查询多个不确定参数

    博客分类:
  • java
阅读更多
  今天一个朋友问jdbc怎么处理多个不确定的sql参数,以前都是where条件后加1=1,呵呵相信大家都领教过吧。我还写过十几个参数一顿if呢 想起来真汗,下面说说我认为不错的方法,面向对象 代码简洁。望老鸟们指教。
public List<User> getList(User user)
		throws Exception
	{
		Connection conn = null;
		PreparedStatement pstm = null;
		ResultSet rs = null;
		List<User> result = new ArrayList<User>();
		StringBuffer sql = new StringBuffer().append("select * from table where sex = ? ");
		
		List<Object> list = new ArrayList<Object>();
		// 如果不确定部分的查询条件不为空值时,Sql增加查询条件
		//user 传递的Bean
		this.addStatement(user, list, sql);
		
		//ConnectionManager 定义的连接类
		conn = ConnectionManager.connectionDb();
		pstm = conn.prepareStatement(sql.toString());
		//参数和?绑定
		this.pstSetObject(pstm, list);
		
		System.out.println(sql.toString());
		//具体操作数据库套路就不罗嗦了 
		
		return result;
	}
	
	//判断查询条件是否为空,不为空时增加查询条件
	//user查询条件封装成的对象,sql 查询语句,list 存放查询条件对象
	private void addStatement(User user,List<Object> list,StringBuffer sql)
	{
		if(!"".equals(user.getUsername()))
		{
			sql.append("AND name = ? ");
			list.add(user.getUsername());
		}
		if(!"".equals(user.getPassword()))
		{
			sql.append("AND password = ? ");
			list.add(user.getPassword());
		}
		if(user.getAge() > 0 && user.getAge() < 120)
		{
			sql.append("AND age = ? ");
			list.add(user.getAge());
		}
	}
	
	//把条件作为参数传给PreparedStatement
	private void pstSetObject(PreparedStatement pstm,List<Object> list) throws SQLException
	{
		if(list != null)
		{
			for(int i = 0; i < list.size(); i++)
			{
				//+1 是因为有一个确定的参数,如果都为动态不确定的参数,可以多判断一下
				pstm.setObject(i + 1, list.get(i));
			}
		}
	}
分享到:
评论
5 楼 free_zhou 2011-05-22  
果这sex=?没有了  那怎么构建sql语句了
missyoutoo8 写道
可以写select * from table where 1=1

1=1是刚开始写代码的时候的写法
4 楼 missyoutoo8 2011-04-20  
可以写select * from table where 1=1
3 楼 free_zhou 2010-10-08  
addStatement
lingsui 写道
lingsui 写道
select * from table where sex = ?

如果这sex=?没有了  那怎么构建sql语句了



不好意思,这几天没上网。
没有了也是正常使用的啊,没有了addStatement方法不会封装任何东西的。如果就这么一个条件没必要那么复杂的搞的。
2 楼 lingsui 2010-09-26  
lingsui 写道
select * from table where sex = ?

如果这sex=?没有了  那怎么构建sql语句了

1 楼 lingsui 2010-09-26  
select * from table where sex = ?

如果这sex=?  那怎么构建sql语句了

相关推荐

    jdbc 分页 sql语句

    5. **ORDER BY子句**:用于对结果集按照一个或多个列进行排序。可以指定升序(ASC,默认)或降序(DESC)。 6. **变量计算**:在Java中,可以通过简单的数学运算来计算出分页所需的参数。 #### 三、示例解析 根据...

    spring封装jdbc查询

    6. **批处理**:Spring JDBC支持批处理操作,可以一次执行多个SQL语句,提高性能。通过`BatchPreparedStatementSetter`接口,我们可以设置批量操作的参数。 7. **DataSourceUtils**:Spring提供的工具类,用于获取...

    JDBC参数配置

    在Java开发中,JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。它由一组用Java语言编写的类和接口组成,通过JDBC驱动程序连接到不同的数据库。在实际应用...

    JDBC性能优化.pdf

    - **优势**:预编译SQL语句可以减少解析时间,并且支持参数化查询,有助于防止SQL注入攻击。 - **示例**:使用`PreparedStatement`替代`Statement`执行查询。 2. **批处理更新**: - **背景**:对于批量数据插入...

    servlet_jdbc

    - **处理结果集**:通过`ResultSet`对象处理查询结果,检查是否存在匹配的记录。 #### 四、安全性考虑 - **参数编码**:在`doPost()`方法中,通过`request.setCharacterEncoding("UTF-8")`对请求进行编码,以防止...

    java jdbc 分页

    具体实现细节需要查看源代码以了解更多信息,如分页查询是否考虑了性能优化(如预编译SQL,使用存储过程等),是否支持动态分页参数,以及是否兼容多种数据库等。 总的来说,Java JDBC分页是数据库操作中的常见需求...

    优化JDBC方法功略

    总之,优化JDBC性能涉及多个方面,包括正确使用MetaData、减少不必要的网络通信、有效管理连接和数据获取等。通过遵循上述策略,开发者可以显著提升JDBC应用程序的运行效率,使其更加稳定、快速。

    泛型封装JDBC

    在实际开发中,查询通常涉及多个条件。利用泛型,我们可以创建一个方法,接受一个`Map, Object&gt;`作为参数,其中键表示列名,值表示对应的查询条件。这样,我们可以在运行时动态构建SQL语句,实现任意数量的查询条件...

    springboot多数据源整合sqlserver

    通过以上步骤,我们可以成功地在Spring Boot应用中整合多个数据源,包括两个MySQL和一个SQL Server。这样的设计提高了系统的灵活性,同时也允许我们充分利用不同数据库的特性,满足复杂的应用场景需求。

    java基于jdbc界面.zip_jdbc_sitbu3

    综上所述,"java基于jdbc界面.zip_jdbc_sitbu3"这个项目是一个通过图形用户界面(GUI)利用JDBC与数据库交互的应用,涵盖了数据库连接、SQL执行、结果处理、事务控制、异常处理以及可能的性能优化策略。对于学习和...

    JDBC文档

    6. **结果处理**:查询结果会返回一个`ResultSet`对象,用于遍历和处理查询结果。注意,`ResultSet`的游标初始位置位于第一行之前,通过`next()`方法移动到下一行。 7. **关闭连接**:为避免资源泄漏,操作完成后应...

    JDBC分页 物理分页 mysql实现

    以下是一个简单的Java代码示例,展示了如何使用JDBC执行带有`LIMIT`和`OFFSET`的SQL查询: ```java int pageSize = 10; // 每页记录数 int pageNum = 3; // 当前页码 String sql = "SELECT * FROM table_name ...

    jdbc面试题目

    - 资源共享:多个应用程序共享连接池中的连接,减少了系统资源消耗。 - 连接管理:提供连接超时、连接失效检测等管理功能。 #### 6. JDBC编程时为什么需要关闭资源? - **原因**:为了确保JDBC资源(如Connection...

    jdbc学习基础笔记

    - **CallableStatement**:专门用于执行存储过程或函数的SQL语句,可以接收和返回多个结果集,非常适合处理复杂数据库操作。 #### 四、动态SQL与预编译SQL - **动态SQL**:SQL语句的结构在运行时动态构建,适用于...

    JDBC 书籍 学习

    这意味着缓存的大小不是根据实际查询结果来确定的,而是根据查询结果的最大可能值来预估。 - **缓存大小计算**:一旦 SQL 语句被解析,所有列的数据类型都会被明确下来,因此可以计算出每列的最大可能内存量。结合 ...

    嵌入式SQL语言

    - **批处理**:将多个SQL语句作为一个整体提交。 - **事务**:管理对数据库的一组操作,确保原子性、一致性、隔离性和持久性。 #### 2.4 动态SQL语句 - **动态修改**:根据运行时变量构建SQL语句并执行。 - **动态...

    SqlServer数据导入MongoDB

    总之,从SQL Server到MongoDB的数据导入涉及多个阶段,包括数据准备、转换、导出、加载、验证、应用层调整和性能优化。这个过程需要深入理解两种数据库系统的特性和差异,以确保数据迁移的顺利进行,并且能够充分...

    Mysql jdbc 驱动下载

    在描述部分,“几乎所有的MySQL JDBC驱动下载”暗示了资源的全面性,意味着该链接或资源提供了多个版本的MySQL JDBC驱动供用户选择,这包括但不限于最新的稳定版、旧版以及可能的测试版。 在标签“MySQL JDBC驱动...

Global site tag (gtag.js) - Google Analytics