java中用statement执行静态sql更新数据的核心是通过connection创建statement实例并调用executeupdate()方法,适用于一次性、无参数的简单dml/ddl操作,但需注意资源释放和sql注入风险。

Java 中用 Statement 执行静态 SQL 更新数据,核心是通过 Connection 创建 Statement 实例,调用 executeUpdate() 方法执行 INSERT、UPDATE 或 DELETE 语句。它适合一次性、不重复、无参数的简单操作,但要注意资源释放和 SQL 注入风险。
获取连接并创建 Statement
先建立数据库连接,再调用 conn.createStatement() 获取 Statement 对象。Connection 必须有效且未关闭:
- 使用
DriverManager.getConnection(url, user, pwd)获取连接(MySQL 8.0+ 可省略Class.forName()) - Statement 是轻量级对象,无需传参,直接创建即可
- 一个 Connection 可创建多个 Statement,彼此独立
执行 update/insert/delete 操作
调用 executeUpdate(String sql) 执行 DML 语句,返回受影响行数(int 类型):
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 成功插入/修改/删除时,返回 > 0 的整数(如返回 1 表示影响 1 行)
- SQL 语句必须是完整、拼接好的字符串,不能含问号占位符(那是 PreparedStatement 的用法)
- 示例:
String sql = "UPDATE users SET email='new@x.com' WHERE id = 100"; - DDL 语句(如 CREATE TABLE)也可用此方法执行,同样返回 0
正确关闭资源防止泄漏
Statement 和 Connection 都实现了 AutoCloseable,务必显式关闭或用 try-with-resources:
- 顺序建议:先关 ResultSet(如有),再关 Statement,最后关 Connection
- 即使发生异常,也要在 finally 块或 try-with-resources 中关闭
- 不关闭会导致数据库连接耗尽、内存泄漏,尤其在高并发场景下后果严重
为什么不用 Statement 做带参数的更新?
Statement 直接拼接字符串,容易引发 SQL 注入,例如用户输入 admin' OR '1'='1 可能绕过条件判断:
- 安全做法:参数化查询 → 改用 PreparedStatement
- 性能考虑:Statement 不预编译,每次执行都需数据库重新解析 SQL
- 适用场景仅限于固定语句,如初始化脚本、管理命令、测试代码等
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










