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));
}
}
}
分享到:
相关推荐
### JDBC参数配置详解 在Java开发中,JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。它由一组用Java语言编写的类和接口组成,通过JDBC驱动程序连接到...
6. **批处理**:Spring JDBC支持批处理操作,可以一次执行多个SQL语句,提高性能。通过`BatchPreparedStatementSetter`接口,我们可以设置批量操作的参数。 7. **DataSourceUtils**:Spring提供的工具类,用于获取...
- **示例**:创建一个`PreparedStatement`对象,并添加多个操作到批处理中。 3. **连接池**: - **背景**:频繁创建和销毁数据库连接非常耗时。 - **建议**:使用连接池技术管理数据库连接,提高资源利用率。 -...
总之,优化JDBC性能涉及多个方面,包括正确使用MetaData、减少不必要的网络通信、有效管理连接和数据获取等。通过遵循上述策略,开发者可以显著提升JDBC应用程序的运行效率,使其更加稳定、快速。
在实际开发中,查询通常涉及多个条件。利用泛型,我们可以创建一个方法,接受一个`Map, Object>`作为参数,其中键表示列名,值表示对应的查询条件。这样,我们可以在运行时动态构建SQL语句,实现任意数量的查询条件...
5. **ORDER BY子句**:用于对结果集按照一个或多个列进行排序。可以指定升序(ASC,默认)或降序(DESC)。 6. **变量计算**:在Java中,可以通过简单的数学运算来计算出分页所需的参数。 #### 三、示例解析 根据...
具体实现细节需要查看源代码以了解更多信息,如分页查询是否考虑了性能优化(如预编译SQL,使用存储过程等),是否支持动态分页参数,以及是否兼容多种数据库等。 总的来说,Java JDBC分页是数据库操作中的常见需求...
- **确定结果集大小**:尽管`ResultSet`本身不直接提供返回行数的方法,但可以通过移动游标到最后行并读取行号来间接获取结果集的大小。在JDBC 1.0中,这一过程较为繁琐,需通过循环`next()`方法直至返回`false`。 ...
以下是一个简单的Java代码示例,展示了如何使用JDBC执行带有`LIMIT`和`OFFSET`的SQL查询: ```java int pageSize = 10; // 每页记录数 int pageNum = 3; // 当前页码 String sql = "SELECT * FROM table_name ...
这意味着缓存的大小不是根据实际查询结果来确定的,而是根据查询结果的最大可能值来预估。 - **缓存大小计算**:一旦 SQL 语句被解析,所有列的数据类型都会被明确下来,因此可以计算出每列的最大可能内存量。结合 ...
- 资源共享:多个应用程序共享连接池中的连接,减少了系统资源消耗。 - 连接管理:提供连接超时、连接失效检测等管理功能。 #### 6. JDBC编程时为什么需要关闭资源? - **原因**:为了确保JDBC资源(如Connection...
- **参数编码**:在`doPost()`方法中,通过`request.setCharacterEncoding("UTF-8")`对请求进行编码,以防止因字符编码不一致导致的问题。 - **防止SQL注入**:使用`PreparedStatement`代替`Statement`,以避免SQL...
"tar"表明这是一个打包文件,通常用于在类Unix系统中归档多个文件和目录。 【描述】描述中的 "mm.mysql.jdbc-2.0pre5.tar" 与标题相同,暗示了这是关于 MySQL 的 JDBC 驱动程序,版本是 2.0pre5,且以 tar 形式打包...
9. **SITBU3**:这个标签可能是指一个特定的项目或课程代码,具体含义需要更多上下文才能确定。它可能是开发环境中特定版本或阶段的标识。 综上所述,"java基于jdbc界面.zip_jdbc_sitbu3"这个项目是一个通过图形...
Spring Boot配置动态数据源访问多个数据库实现代码详解 通过Spring Boot配置动态数据源访问多个数据库可以实现数据库的动态增删和数量无限的支持,下面将详细介绍该实现代码的知识点。 数据源配置管理 在Spring ...
在描述部分,“几乎所有的MySQL JDBC驱动下载”暗示了资源的全面性,意味着该链接或资源提供了多个版本的MySQL JDBC驱动供用户选择,这包括但不限于最新的稳定版、旧版以及可能的测试版。 在标签“MySQL JDBC驱动...
- **CallableStatement**:专门用于执行存储过程或函数的SQL语句,可以接收和返回多个结果集,非常适合处理复杂数据库操作。 #### 四、动态SQL与预编译SQL - **动态SQL**:SQL语句的结构在运行时动态构建,适用于...