Java实现可选多条件查询数据
时间: 2023-09-04 12:11:08 浏览: 119
在Java中实现可选多条件查询数据,可以使用动态SQL语句来构建查询语句。以下是一个示例代码,假设有一个表格名为`user`,其中有`id`、`name`、`age`和`gender`四个字段,我们需要根据传入的参数进行查询,参数包括`id`、`name`、`age`和`gender`,但是这些参数不一定全部都会有值,可能只有部分有值,甚至全部都没有值。代码如下:
```java
public List<User> queryUsers(Integer id, String name, Integer age, String gender) {
StringBuilder sql = new StringBuilder("SELECT * FROM user WHERE 1 = 1");
List<Object> params = new ArrayList<>();
if (id != null) {
sql.append(" AND id = ?");
params.add(id);
}
if (name != null) {
sql.append(" AND name LIKE ?");
params.add("%" + name + "%");
}
if (age != null) {
sql.append(" AND age = ?");
params.add(age);
}
if (gender != null) {
sql.append(" AND gender = ?");
params.add(gender);
}
// 执行查询操作
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<User> userList = new ArrayList<>();
try {
conn = getConnection();
ps = conn.prepareStatement(sql.toString());
for (int i = 0; i < params.size(); i++) {
ps.setObject(i + 1, params.get(i));
}
rs = ps.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
user.setGender(rs.getString("gender"));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭连接
closeAll(conn, ps, rs);
}
return userList;
}
```
在这个方法中,我们首先构建了一个通用的SELECT语句,并且where条件始终为true,这是为了方便后面根据传入的参数来动态添加查询条件。然后我们遍历参数列表,如果参数不为空,则根据参数类型不同,添加相应的查询条件。最后执行查询操作,将结果封装到一个List中返回。
需要注意的是,我们使用了预处理语句,这是为了避免SQL注入攻击,同时也可以提高查询效率。