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

Java-如何在JDBC中获取插入ID?

钮实
2023-03-14
问题内容

我想INSERT在Java中使用JDBC在数据库(本例中为Microsoft SQL Server)中进行记录。同时,我想获取插入ID。如何使用JDBC API实现此目的?


问题答案:

如果它是自动生成的密钥,那么你可以使用Statement#getGeneratedKeys()它。你需要Statement使用与用于相同的名称进行调用INSERT。首先,你需要创建Statement.RETURN_GENERATED_KEYS用于通知JDBC驱动程序以返回键的语句。

这是一个基本示例:

public void create(User user) throws SQLException {
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT,
                                      Statement.RETURN_GENERATED_KEYS);
    ) {
        statement.setString(1, user.getName());
        statement.setString(2, user.getPassword());
        statement.setString(3, user.getEmail());
        // ...

        int affectedRows = statement.executeUpdate();

        if (affectedRows == 0) {
            throw new SQLException("Creating user failed, no rows affected.");
        }

        try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
            if (generatedKeys.next()) {
                user.setId(generatedKeys.getLong(1));
            }
            else {
                throw new SQLException("Creating user failed, no ID obtained.");
            }
        }
    }
}

请注意,你是否依赖JDBC驱动程序。当前,大多数最新版本都可以使用,但是如果我没错,Oracle JDBC驱动程序在此方面仍然有些麻烦。MySQL和DB2已经支持它很久了。PostgreSQL不久前就开始支持它。我从未评论过MSSQL,因为我从未使用过它。

对于Oracle,你可以在同一事务中直接在CallableStatementwith之后调用with RETURNING子句或SELECT CURRVAL(sequencename)(或执行此操作的任何特定于DB的特定语法)INSERT以获取最后生成的密钥。



 类似资料:
  • 问题内容: 如何在JDBC中获取插入ID? 问题答案: 如果它是自动生成的密钥,那么你可以使用它。你需要Statement使用与用于相同的名称进行调用INSERT。首先,你需要创建用于通知JDBC驱动程序以返回键的语句。 这是一个基本示例: 请注意,你是否依赖JDBC驱动程序。当前,大多数最新版本都可以使用,但是如果我没错,Oracle JDBC驱动程序仍然有些麻烦。MySQL和DB2已经支持它很

  • 我想用Java中的JDBC在数据库中插入一条记录(在我的例子中是Microsoft SQL Server)。同时,我想获得insert ID。如何使用JDBC API实现这一点?

  • 问题内容: 问题标题怎么说。使用诸如之类的查询时,我是否需要提供表名或任何其他信息以指定我正在谈论的表/数据库? 问题答案: 返回当前会话中生成的最新标识。在大多数情况下,您可能需要使用它,它返回当前作用域中生成的最新标识。 例如,如果您向 table1中 插入一行,但是该插入触发了将行插入到 table2中 的触发器,则它将从 table2 返回标识,而将从 table1 返回标识。

  • 问题内容: 这个问题已经在这里有了答案 : 9年前关闭。 可能重复: 如何在JDBC中获取插入ID? 嗨,我正在使用JDBC通过Java连接数据库。 现在,我执行一些插入查询,并且需要获取最后插入值的ID(因此,在之后)。 我不需要类似之类的东西,因为我可能有并发问题。 我只需要检索与上一次插入相关的ID(关于我的Statement实例)。 我试过了,但是似乎在JDBC上不起作用: 实际上,每次,

  • 问题内容: 我正在使用JDBC批处理插入插入许多记录。有什么方法可以获取每个记录的生成密钥吗?我可以配合批量插入使用吗? 我在用 我正在考虑与循环一起使用以获得所需的结果。还有其他解决方案吗? 问题答案: 似乎Oracle 12c不支持根据以下页面将自动生成的密钥与批处理更新结合使用: http://docs.oracle.com/cd/E16655_01/java.121/e17657/jdbc

  • 保存课程()应该启动验证导师()来创建和/或验证导师的当前输入信息是否可以添加到课程实体构造器中。mMentorViewModel.save导师(mMentor)应该通过Schuldler存储库,而Schuludler存储库使用数据库中的MentorDAO来插入新的导师。 我读过这个方法Android Room-使用auto generate获取新插入行的id,但是我缺少一些关于如何获取新创建的m