execute,executeQuery,executeUpdate的区别是什么?
在 JDBC 中,我们有 Statement
对象,它包含三个用于执行 SQL 语句的方法:execute()
, executeQuery()
, 和 executeUpdate()
。它们的区别主要体现在用途和返回值上。
executeQuery(String sql)
: 这个方法主要用于执行 SELECT 语句,并返回一个ResultSet
对象,这个对象包含了查询结果。如果你尝试使用这个方法执行 INSERT, UPDATE, DELETE 或者任何不返回结果集的 SQL 语句,它将抛出SQLException
。-
executeUpdate(String sql)
: 这个方法主要用于执行 INSERT, UPDATE 或 DELETE 语句,也可以用于 SQL DDL (数据定义语言) 语句,如CREATE TABLE
和DROP TABLE
等。返回值是一个 int,表示受影响的行数。如果执行的 SQL 语句没有影响到任何行,那么返回值为 0。 -
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 语句。