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

时间:2015-07-30 15:13:57

标签: java mysql jdbc

此代码片段

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().

我说在创建声明时请求生成的密钥,但显然我错了。这是什么问题? (我是JDBC的新手。我试图做的是检索在前一个记录插入过程中自动设置的主键值(AUTO_INCREMENTed)。也许还有更好的方法可以做到这一点。我正在使用mysql。)

2 个答案:

答案 0 :(得分:2)

你的问题就在这一行:

statement.executeUpdate(query);

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

statement.executeUpdate();

第一个版本不使用您已经编写的语句,而是使用您的查询字符串(不使用RETURN_GENERATED_KEYS选项)创建一个新语句

答案 1 :(得分:2)

中删除参数
statement.executeUpdate(query);

更改为

 statement.executeUpdate();

因为您已经在

中准备了声明
PreparedStatement statement = connect.prepareStatement(
          query, Statement.RETURN_GENERATED_KEYS);