如何在JDBC中获取插入ID?

如何在JDBC中获取插入ID?

我也想INSERT数据库中的一个记录(在我的例子中是MicrosoftSQLServer),它使用Java中的JDBC。同时,我想获得插入ID。如何使用JDBCAPI实现这一点?



紫衣仙女
浏览 808回答 3
3回答

慕姐4208626

如果它是自动生成的密钥,则可以使用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在同一事务中获取最后生成的密钥。

慕尼黑8549860

创建生成列String generatedColumns[] = { "ID" };将此遗传列传递给您的语句PreparedStatement stmtInsert = conn.prepareStatement(insertSQL, generatedColumns);使用ResultSet对象获取GeneratedKeys on语句。ResultSet rs = stmtInsert.getGeneratedKeys();if (rs.next()) {     long id = rs.getLong(1);     System.out.println("Inserted ID -" + id); // display inserted record}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
MySQL