为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JDBC中获取插入ID?

如何在JDBC中获取插入ID?

紫衣仙女 2019-06-01 15:37:36
如何在JDBC中获取插入ID?我也想INSERT数据库中的一个记录(在我的例子中是MicrosoftSQLServer),它使用Java中的JDBC。同时,我想获得插入ID。如何使用JDBCAPI实现这一点?
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

如果它是自动生成的密钥,则可以使用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,可以调用CallableStatement带着RETURNING条款或aSELECT CURRVAL(sequencename)(或执行此操作的任何特定于DB的语法)INSERT在同一事务中获取最后生成的密钥。


查看完整回答
反对 回复 2019-06-01
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

  1. 创建生成列

    String generatedColumns[] = { "ID" };
  2. 将此遗传列传递给您的语句

    PreparedStatement stmtInsert = conn.prepareStatement(insertSQL, generatedColumns);
  3. 使用ResultSet对象获取GeneratedKeys on语句。

    ResultSet rs = stmtInsert.getGeneratedKeys();if (rs.next()) {
        long id = rs.getLong(1);
        System.out.println("Inserted ID -" + id); // display inserted record}


查看完整回答
反对 回复 2019-06-01
  • 3 回答
  • 0 关注
  • 807 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号