当前位置: 首页 > 面试题库 >

MySQL和Java-获取最后插入值的ID(JDBC)[重复]

钦楚青
2023-03-14
问题内容

这个问题已经在这里有了答案

9年前关闭。

可能重复:
如何在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().

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


问题答案:

您不会只是更改:

numero = stmt.executeUpdate(query);

至:

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

查看JDBC
Statement接口的文档。

更新
:显然对此答案有很多困惑,但是我的猜测是,困惑的人们没有在所问问题的背景下阅读它。如果您采用OP在他的问题中提供的代码,并替换我建议的单行(第6行),则一切正常。该numero变量是完全无关的,它被设置后,从来没有读过它的价值。



 类似资料:
  • 问题内容: 我有一个查询,我想插入最后一个ID。字段ID是主键,并且是自动递增的。 我知道我必须使用以下语句: 该语句适用于如下查询: 但是,如果我想使用以下语句获取ID: 我收到此错误: 我究竟做错了什么? 问题答案: 那是因为那是SQL函数,而不是PHP。您可以使用。 喜欢: 如果要使用SQL而不是PDO API进行操作,则可以像普通的select查询一样进行操作:

  • 我有一个MySQL数据表,详细信息如下: 它正在工作,只是我正在尝试在插入数据后从数据库中获取id号。我该怎么做?

  • 问题内容: …并且该手册似乎表明您可以随时拨打电话,并且可以正常使用。但是这个… …似乎说明它必须在事务内。所以我的问题是:我可以在查询之前(只要没有交易)就等我想要的时间吗?面对许多并发连接,这可靠吗? 问题答案: PostgreSQL中的INSERT,UPDATE和DELETE具有RETURNING子句,这意味着您可以执行以下操作: 然后查询将为插入的每一行返回它为id插入的值。将往返保存到服

  • 问题内容: 是否有任何选项可以获取CodeIgniter中新记录的最后插入ID? 考虑字段id(自动递增)firstcolumn和secondcolumn的表组成。 这样,您可以在以下代码中使用插入ID。 问题答案: 真可惜 我看了一下用户指南,第一个功能是 这也适用于activerecord插入… 编辑:我更新了链接

  • 问题内容: 我正在尝试获取类似mysql_insert_id()的mysql命令;它检索最后插入的行的auto_increment ID。我该怎么做才能在Java中获得它? 我的姓氏声明为INT。我不知道在rs.get中使用什么以及参数。 问题答案: 尝试使用别名

  • 问题内容: 我使用以下查询将多个记录插入到表中: 由于查询要插入多个记录,因此无法使用 SCOPE_IDENTITY 来检索PK。有什么方法可以获取最近插入记录的ID? 问题答案: SCOPE_IDENTITY()将正确为您提供LAST ID。您需要将其与@@ Rowcount结合使用,以提供ID范围。 正如其他Richard指出的那样 ,这仅在您将增量设置为1时有效 例如: 执行此操作的另一种方