有人能告诉我为什么下面的方法(
根据
executeUpdate
)总是返回1,即使我已经指定了要返回生成的键吗?我想在generatedKey
变量中获取生成的键。对于使用getGeneratedKeys
的PreparedStatement
来说,它运行良好,但我想使用Statement
来做到这一点。 public int testQuery(Connection con) {
int generatedKey = 0;
try {
Statement statement = con.createStatement();
generatedKey = statement.executeUpdate("INSERT INTO profile (fullname) VALUES ('Visruth CV')", Statement.RETURN_GENERATED_KEYS);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
con.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
System.out.println("generated key : "+generatedKey);
return generatedKey;
}
根据
executeUpdate(String sql, int autoGeneratedKeys)
的文档,它说:Executes the given SQL statement and signals the driver with the given flag about whether the auto-generated keys produced by this Statement object should be made available for retrieval. The driver will ignore the flag if the SQL statement is not an INSERT statement, or an SQL statement able to return auto-generated keys (the list of such statements is vendor-specific).
Parameters:
sql an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.
autoGeneratedKeys a flag indicating whether auto-generated keys should be made available for retrieval; one of the following constants: Statement.RETURN_GENERATED_KEYS Statement.NO_GENERATED_KEYS
Returns:
either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing
Throws:
SQLException - if a database access error occurs, this method is called on a closed Statement, the given SQL statement returns a ResultSet object, or the given constant is not one of those allowed
SQLFeatureNotSupportedException - if the JDBC driver does not support this method with a constant of Statement.RETURN_GENERATED_KEYS
Since:
1.4
autoGeneratedKeys
一个标志,指示是否应为检索提供自动生成的键;以下常量之一:Statement.RETURN_GENERATED_KEYS Statement.NO_GENERATED_KEYS"。现在我想起来了,在PreparedStatement
类中不仅有getGeneratedKeys
方法,而且在Statement
类中也可用。经过很长时间我才使用jdbc,这就是问题所在。 - Visruth