任何人都可以告诉我为什么executeUpdate即使我已经指定返回生成的密钥,下面的方法()总是返回1?我想在generatedKey变量中获取生成的键.它适用于PreparedStatement使用getGeneratedKeys,但我想这样做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;
}
Run Code Online (Sandbox Code Playgroud)
根据文档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
Run Code Online (Sandbox Code Playgroud)
它在你粘贴的javadoc中说:
returns: either (1) the row count for SQL Data Manipulation Language or (2) 0 for SQL statements that return nothing
Run Code Online (Sandbox Code Playgroud)
它返回1,因为你总是只插入1个值.它不会返回生成的密钥.
要获取生成的密钥,您需要运行以下行:
rs = stmt.getGeneratedKeys()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4857 次 |
| 最近记录: |