#使用Statement对象
Statement是JDBC中用于执行静态SQL语句的接口。应用程序通过Connection对象创建Statement,再使用Statement向YashanDB发送SQL语句。
Statement适用于SQL结构固定且不需要绑定应用程序输入参数的场景。SQL中包含用户输入或其他外部参数时,应优先使用PreparedStatement,通过绑定参数传值,避免拼接SQL字符串。
# 获取Statement对象
使用Connection.createStatement()创建默认的Statement对象。创建连接的方式请参考使用JDBC连接数据库。
try (Statement statement = connection.createStatement()) {
// 使用statement执行SQL语句。
}
默认结果集类型为ResultSet.TYPE_FORWARD_ONLY,默认并发模式为ResultSet.CONCUR_READ_ONLY。需要滚动或更新结果集时,可以使用带结果集类型和并发模式参数的重载方法;具体支持情况以JDBC接口支持汇总为准。
import java.sql.ResultSet;
import java.sql.Statement;
try (Statement statement = connection.createStatement(
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY)) {
// 使用statement执行查询。
}
使用完Statement后应及时关闭。推荐使用try-with-resources,由Java自动释放Statement及其关联的结果集资源。
# Statement对象与SQL执行方法
Statement提供的常用SQL执行方法如下表所示。
| 方法 | 适用场景 | 返回值 |
|---|---|---|
| executeQuery(String sql) | 执行返回单个结果集的查询语句。 | ResultSet |
| executeUpdate(String sql) | 执行INSERT、UPDATE、DELETE或不返回结果集的SQL语句。 | 受影响的行数 |
| execute(String sql) | SQL可能返回结果集或多个执行结果时使用。 | 第一个结果是否为结果集 |
具体SQL执行示例请参考执行SQL语句。
# 使用示例
下面示例创建Statement并执行一条更新语句。示例假定变量connection已通过前一章节建立连接。
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class StatementExample {
public static void updateCustomer(Connection connection) throws SQLException {
String sql = "UPDATE customer SET name = 'Alice' WHERE id = 1";
try (Statement statement = connection.createStatement()) {
int affectedRows = statement.executeUpdate(sql);
System.out.println("Affected rows: " + affectedRows);
}
}
}
示例执行成功时,输出如下:
Affected rows: 1
Note:
Statement不会自动提交或回滚事务。事务是否自动提交由Connection的事务设置决定;需要显式控制事务时,请参考处理事务。

