MySQL和Java – 获取最后插入的值(JDBC)的ID

可能重复:
如何在JDBC中获取插入ID?

嗨,我使用JDBC通过Java连接数据库。

现在,我做了一些插入查询,我需要得到最后插入的值的id(所以,在stmt.executeUpdate )。

我不需要像SELECT id FROM table ORDER BY id DESC LIMIT 1 ,因为我可能有并发问题。

我只需要检索与最后一个插入关联的id(关于我的Statement的实例)。

我试过这个,但似乎不适用于JDBC:

 public Integer insertQueryGetId(String query) { Integer numero=0; Integer risultato=-1; try { Statement stmt = db.createStatement(); numero = stmt.executeUpdate(query); ResultSet rs = stmt.getGeneratedKeys(); if (rs.next()){ risultato=rs.getInt(1); } rs.close(); stmt.close(); } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); risultato=-1; } return risultato; } 

其实每次risultato = -1 ,我都得到了java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement(). java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

我该如何解决这个问题? 感谢Stackoverflow人:)

你不会改变:

 numero = stmt.executeUpdate(query); 

至:

 numero = stmt.executeUpdate(query, Statement.RETURN_GENERATED_KEYS); 

查看JDBC Statement接口的文档。

更新 :显然这个答案有很多困惑,但我的猜测是,困惑的人并没有在被问到的问题的背景下阅读它。 如果你把OP中提供的代码代入我所build议的单行(第6行),那么一切都将起作用。 numerovariables是完全不相关的,它的值在设置后永远不会被读取。

或者你可以这样做:

 Statement stmt = db.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); numero = stmt.executeUpdate(); ResultSet rs = stmt.getGeneratedKeys(); if (rs.next()){ risultato=rs.getInt(1); } 

但是用Sean Bright的回答来代替你的情况。