当前位置: 代码迷 >> java >> 此getGeneratedKeys()JDBC语句有什么问题?
  详细解决方案

此getGeneratedKeys()JDBC语句有什么问题?

热度:97   发布时间:2023-07-17 21:02:36.0

该代码片段

PreparedStatement statement = connect.prepareStatement(
          query, Statement.RETURN_GENERATED_KEYS);
statement.executeUpdate(query);
try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
    ...
}

不断扔

java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

我想说的是在创建语句时要求了generatedkeys,但是显然我错了。 这是什么问题? (我是JDBC的新手。我想做的是检索在先前的记录插入过程中已自动设置(AUTO_INCREMENTed)的主键值。也许有更好的方法来实现...使用mysql)。

您的问题是这一行:

statement.executeUpdate(query);

不要在使用无参数版本时传递query参数:

statement.executeUpdate();

第一个版本不使用您已经做过的准备好的语句,而是使用查询字符串来创建一个新的语句(不带RETURN_GENERATED_KEYS选项)

从中删除参数

statement.executeUpdate(query);

改成

 statement.executeUpdate();

因为您已经在

PreparedStatement statement = connect.prepareStatement(
          query, Statement.RETURN_GENERATED_KEYS);
  相关解决方案