execute,executeQuery,executeUpdate的区别是什么?

在 JDBC 中,我们有 Statement 对象,它包含三个用于执行 SQL 语句的方法:execute(), executeQuery(), 和 executeUpdate()。它们的区别主要体现在用途和返回值上。

  1. executeQuery(String sql): 这个方法主要用于执行 SELECT 语句,并返回一个 ResultSet 对象,这个对象包含了查询结果。如果你尝试使用这个方法执行 INSERT, UPDATE, DELETE 或者任何不返回结果集的 SQL 语句,它将抛出 SQLException

  2. executeUpdate(String sql): 这个方法主要用于执行 INSERT, UPDATE 或 DELETE 语句,也可以用于 SQL DDL (数据定义语言) 语句,如 CREATE TABLEDROP TABLE 等。返回值是一个 int,表示受影响的行数。如果执行的 SQL 语句没有影响到任何行,那么返回值为 0。

  3. execute(String sql): 这个方法可以执行任何 SQL 语句,包括那些返回多个结果集、多个更新计数或者二者混合的存储过程。返回值是一个 boolean,表示是否返回了 ResultSet。如果执行的是 SELECT 语句,那么返回值为 true;如果执行的是 INSERT, UPDATE, DELETE 或者 DDL 语句,那么返回值为 false。

以下是这三种方法的使用示例:

Statement stmt = conn.createStatement();

// executeQuery example
String selectSql = "SELECT * FROM users";
ResultSet rs = stmt.executeQuery(selectSql);
while (rs.next()) {
    System.out.println(rs.getString("username"));
}

// executeUpdate example
String updateSql = "UPDATE users SET age = 30 WHERE username = 'test'";
int rowsAffected = stmt.executeUpdate(updateSql);
System.out.println("Rows affected: " + rowsAffected);

// execute example
boolean result = stmt.execute(selectSql);
if (result) {
    ResultSet rs = stmt.getResultSet();
    while (rs.next()) {
        System.out.println(rs.getString("username"));
    }
} else {
    int updateCount = stmt.getUpdateCount();
    System.out.println("Update count: " + updateCount);
}

在这个示例中,我们首先创建了一个 Statement 对象,然后使用 executeQuery() 来执行 SELECT 语句,使用 executeUpdate() 来执行 UPDATE 语句,并使用 execute() 来执行 SELECT 语句。

发表评论

后才能评论