如何在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
在同一事务中获取最后生成的密钥。

慕尼黑8549860
TA贡献1818条经验 获得超11个赞
创建生成列 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}
添加回答
举报
0/150
提交
取消