JDBC 模糊查
模糊查询在实际的开发中很长用到, 今天我来分享如何使用 PreparedStatement 实现模糊查
比如 我想在 user 表中根据 name 模糊查询
下面我们给出 user 表的情况:
我们使用 PreparedStatement 为数据库操作对象
创建该对象时的 sql 语句框架为 :
String sql = "select * from user where name like ?"
之后将 ? 替换即可
由于是模糊查, 我们并不知道关键字 x 的位置, 所以我们使用 %x% 来替换 ? 即可
下面给出代码:
import java.sql.*;
import java.util.Scanner;
// 模糊查询
public class Test {
public static void main(String[] args) {
// 数据库连接对象
Connection conn = null;
// 数据库操作对象
PreparedStatement ps = null;
// 查询结果集对象
ResultSet rs = null;
try {
// 1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2. 创建数据库连接对象
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true";
String username = "root";
String password = "XXXX";
conn = DriverManager.getConnection(url, username, password);
// 3. 创造数据库操作对象
String sql = "select * from user where name like ?";
ps = conn.prepareStatement(sql);
System.out.println("请输入模糊查关键字:");
Scanner scanner = new Scanner(System.in);
String keyWord = scanner.next();
String name = "%" + keyWord + "%";
// 替换
ps.setString(1, name);
// 4. 执行 sql 语句
rs = ps.executeQuery();
// 5. 操作查询结果集
while (rs.next()) {
int id = rs.getInt("id");
String un = rs.getString("name");
String pw = rs.getString("password");
System.out.println(id + "," + un + "," + pw);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally {
// 6. 释放资源
try {
if (rs != null) {
rs.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (ps != null) {
ps.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
测试结果如上, 可见 PreparedStatement 确实可以完成模糊查.
今天的内容就分享到这里, 希望大家多多评论共同进步