Java JDBC执行SQL的核心是安全、可维护地管理资源:先获取Connection,再创建Statement或PreparedStatement,执行后必须用try-with-resources关闭ResultSet、Statement、Connection;优先使用PreparedStatement防SQL注入。

Java 中用 JDBC 执行 SQL 语句,核心是获取 Connection,创建 Statement 或 PreparedStatement,再调用执行方法。关键不在“怎么写”,而在于“怎么写得安全、可维护、不泄露资源”。
1. 基础步骤:连库 → 建语句 → 执行 → 关闭
一个典型的查询流程如下:
- 通过
DriverManager.getConnection(url, user, pwd)获取连接(推荐用连接池,如 HikariCP) - 用
connection.createStatement()创建普通语句,或connection.prepareStatement("SELECT * FROM t WHERE id = ?")创建预编译语句 - 对
Statement:直接调用executeQuery("SELECT...")或executeUpdate("INSERT...")
对PreparedStatement:先用setXxx(1, value)设置参数,再执行 - 执行后必须显式关闭
ResultSet、Statement、Connection(建议用 try-with-resources)
2. 查询数据:用 executeQuery() + ResultSet
适合 SELECT 语句,返回结果集:
String sql = "SELECT id, name FROM user WHERE age > ?";
try (Connection conn = DriverManager.getConnection(url, user, pwd);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, 18);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + ": " + name);
}
}
}
3. 更新数据:用 executeUpdate()
适用于 INSERT、UPDATE、DELETE,返回受影响行数:
int rows = stmt.executeUpdate("DELETE FROM user WHERE id = 100")- 用
PreparedStatement更安全:ps.setString(1, "admin"); ps.executeUpdate(); - 注意:DDL(如
CREATE TABLE)也能用executeUpdate执行
4. 灵活执行:用 execute() 处理混合场景
当不确定 SQL 类型(比如用户输入的任意语句),或需同时处理查询和更新时使用:
- 返回
boolean:true 表示有结果集(可用getResultSet()),false 表示无结果集(可用getUpdateCount()) - 例如执行存储过程或带多个语句的批处理时较常见
- 日常开发中优先用更明确的
executeQuery/executeUpdate
不复杂但容易忽略的是资源释放和 SQL 注入防护——永远优先选 PreparedStatement,永远用 try-with-resources 包裹可关闭资源。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











