Java中Statement适用于简单静态SQL,需手动关闭资源、防范SQL注入;通过Connection.createStatement()创建,用executeQuery()查数据、executeUpdate()做增删改,返回值表影响行数。

Java 中使用 Statement 接口执行 SQL 查询和更新,核心是通过 JDBC 获取连接后创建 Statement 实例,再调用对应方法。需注意资源手动关闭、SQL 注入风险以及简单场景适用性。
获取 Connection 并创建 Statement
先通过 DriverManager.getConnection() 或数据源获取连接,再调用 connection.createStatement() 得到 Statement 对象。该对象默认不支持参数占位符,适合执行固定 SQL。
- 确保数据库驱动已加载(JDBC 4.0+ 通常自动加载)
- 连接 URL、用户名、密码需正确配置,例如:
jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC - Statement 默认游标为只进、只读,不支持重执行或滚动定位
执行查询:用 executeQuery() 获取 ResultSet
executeQuery(String sql) 专用于 SELECT 语句,返回 ResultSet 对象。必须用 next() 移动指针,并用 getXXX() 方法取值。
- SQL 字符串需拼接完整,如
"SELECT id, name FROM user WHERE age > " + minAge - 遍历结果前必须调用
rs.next(),否则会跳过第一行或抛出异常 - 推荐按列名取值(
rs.getString("name")),比按索引更易维护
执行更新:用 executeUpdate() 处理 INSERT/UPDATE/DELETE
executeUpdate(String sql) 执行 DML 语句,返回受影响的行数(int 类型)。对 CREATE、DROP 等 DDL 语句也适用。
立即学习“Java免费学习笔记(深入)”;
- 返回值为 0 表示没影响任何行(如 UPDATE 条件不匹配),不是错误
- 插入时若表有自增主键,需额外调用
getGeneratedKeys()获取 ID - 批量操作可用
addBatch()+executeBatch()提升效率
务必关闭资源:Connection、Statement、ResultSet
JDBC 资源不自动释放,必须显式关闭。推荐使用 try-with-resources(Java 7+)保证顺序关闭,避免泄漏。
- 关闭顺序应为:ResultSet → Statement → Connection(反向于创建顺序)
- 若未用 try-with-resources,需在 finally 块中逐个判空关闭
- 关闭 Connection 会自动关闭其创建的所有 Statement 和 ResultSet,但显式关闭更清晰可控
Statement 适合简单、静态 SQL 场景;涉及用户输入时务必改用 PreparedStatement 防注入;频繁执行相同结构 SQL 也建议切换为 PreparedStatement 提升性能。


















