#使用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的事务设置决定;需要显式控制事务时,请参考处理事务。

edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流