Java中Statement接口的详细介绍

三、Statement接口

Statement接口概述

Statement接口是Java JDBC API中的一个核心接口,用于执行SQL语句。它是java.sql.Statement接口的一部分,提供了执行SQL语句的基本功能。通常与Connection对象一起使用,以执行SQL查询、更新等操作。

Statement接口的主要作用是执行SQL语句,并获取结果集(如果是查询语句)。提供了以下几种方法来执行SQL语句:

  • execute:执行任意类型的SQL语句

  • executeQuery:仅执行select查询语句,并返回结果集

  • executeUpdate:执行insert、update、delete语句,并返回受影响的行数

// 使用的方法
// 创建Statement对象
// 创建Statement对象需要先有一个Connection对象
Statement st = conn.createStatement();
// 执行SQL查询并获取结果集
ResultSet rs = st.executeQuery("select * from users");
while(rs.next()){
    int id = rs.getInt("id");
    String name = rs.getString("name");
    System.out.println("ID: " + id + ", Name: " + name);
}

// 执行SQL更新并获取受影响的行数
int rows = st.executeUpdate("insert into users(name,age) values ('tom', 30)");
System.out.println(rows + " row(s) inserted.");
Java源码:
// Statement接口位于java.sql包中,定义了执行SQL语句的方法,,以下是Statement接口的部分源码
public interface Statement extends Wrapper, SQLData, SQLXML {

    // 执行任意类型的 SQL 语句
    ResultSet executeQuery(String sql) throws SQLException;

    // 执行 SQL 更新
    int executeUpdate(String sql) throws SQLException;

    // 执行任意类型的 SQL 语句
    boolean execute(String sql) throws SQLException;

    // 获取结果集元数据
    ResultSetMetaData getMetaData() throws SQLException;

    // 获取当前结果集
    ResultSet getResultSet() throws SQLException;

    // 获取当前更新计数
    int getUpdateCount() throws SQLException;

    // 获取当前警告
    SQLWarning getWarnings() throws SQLException;

    // 清除警告
    void clearWarnings() throws SQLException;

    // 更多方法...
}
源码中核心方法的解析:
  1. ResultSet executeQuery(String sql)

    • 作用:执行select查询语句,并返回结果集

    • 参数:sql是SQL查询语句

    • 返回值:ResultSet对象,包含查询结果

    • 抛出异常:SQLException

  2. int executeUpdate(String sql)

    • 作用:执行insert、update、delete语句,并返回受影响的行数

    • 参数:sql是SQL更新语句

    • 返回值:受影响的行数

    • 抛出异常:SQLException

  3. boolean execute(String sql)

    • 作用:执行任意类型的SQL语句,并返回一个布尔值,指示是否返回结果集

    • 参数:sql是SQL语句

    • 返回值:如果返回结果集,则返回true;否则返回false

    • 抛出异常:SQLException

  4. ResultSetMetaData getMetaData()

    • 作用:获取当前结果集的元数据

    • 返回值:ResultSetMetaData对象,包含结果集的元数据信息

    • 抛出异常:SQLException

  5. ResultSet getResultSet()

    • 作用:获取当前的结果集

    • 返回值:当前的ResultSet对象

    • 抛出异常:SQLException

  6. int getUpdateCount()

    • 作用:获取当前的更新计数。

    • 返回值:当前的更新计数。

    • 抛出异常:SQLException

  7. SQLWarning getWarnings()

    • 作用:获取当前的警告信息。

    • 返回值:SQLWarning 对象,包含警告信息。

    • 抛出异常:SQLException

  8. void clearWarnings()

    • 作用:清除当前的警告信息。

    • 抛出异常:SQLException

Statement接口的实现

在实际JDBC驱动中,Statement接口的具体实现是由具体的数据库驱动提供的。例如,在MySQL的JDBC驱动中,Statement接口的具体实现类为com.mysql.jdbc.StatementImpl

// 以下是MySQL JDBC驱动中的statementImpl类的部分源码
public class StatementImpl implements Statement {
    // 构造方法
    public StatementImpl(Connection connection, int resultSetType, int resultSetConcurrency, int resultSetHoldability) {
        super(connection, resultSetType, resultSetConcurrency, resultSetHoldability);
    }

    // 执行 SQL 查询
    @Override
    public ResultSet executeQuery(String sql) throws SQLException {
        // 调用底层实现
        return this.executeWithFlags(sql, Statement.EXECUTE_QUERY);
    }

    // 执行 SQL 更新
    @Override
    public int executeUpdate(String sql) throws SQLException {
        // 调用底层实现
        return this.executeUpdateWithFlags(sql, Statement.EXECUTE_UPDATE);
    }

    // 执行任意类型的 SQL 语句
    @Override
    public boolean execute(String sql) throws SQLException {
        // 调用底层实现
        return this.executeWithFlags(sql, Statement.EXECUTE);
    }

    // 获取结果集元数据
    @Override
    public ResultSetMetaData getMetaData() throws SQLException {
        // 调用底层实现
        return this.getResultSet().getMetaData();
    }

    // 获取当前结果集
    @Override
    public ResultSet getResultSet() throws SQLException {
        // 调用底层实现
        return this.getResultSetInternal();
    }

    // 获取当前更新计数
    @Override
    public int getUpdateCount() throws SQLException {
        // 调用底层实现
        return this.getUpdateCountInternal();
    }

    // 获取当前警告
    @Override
    public SQLWarning getWarnings() throws SQLException {
        // 调用底层实现
        return this.getWarningsInternal();
    }

    // 清除警告
    @Override
    public void clearWarnings() throws SQLException {
        // 调用底层实现
        this.clearWarningsInternal();
    }

    // 更多方法...
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值