有人可以告诉我为什么下面的方法(executeUpdate
)总是返回1,即使我已经指定返回生成的密钥吗?我想在generatedKey
变量中获取生成的密钥。它适用于使用PreparedStatement
的{{1}},但我希望使用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;
}
的文档,它说:
executeUpdate(String sql, int autoGeneratedKeys)
答案 0 :(得分:6)
它在你粘贴的javadoc中说:
returns: either (1) the row count for SQL Data Manipulation Language or (2) 0 for SQL statements that return nothing
它返回1因为你总是只插入1个值。它不会返回生成的密钥。
要获取生成的密钥,您需要运行以下行:
rs = stmt.getGeneratedKeys()
答案 1 :(得分:2)
如果您阅读文档的Returns
部分,则不会说它会返回生成的密钥。它返回行数或0。
执行语句后使用getGeneratedKeys()获取生成的密钥。