如何在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
提交
取消