是否有跨數據庫平臺的方式來獲取剛剛插入的記錄的主鍵?插入行jdbc的主鍵?
我注意到this answer表示你可以通過調用SELECT LAST_INSERT_ID()
得到它,我認爲你可以調用SELECT @@IDENTITY AS 'Identity';
有沒有一種常見的方法來在jdbc中跨數據庫執行此操作?
如果不是這樣,你會建議我爲一段可以訪問任何SQL Server,MySQL和Oracle的代碼實現這個功能嗎?
是否有跨數據庫平臺的方式來獲取剛剛插入的記錄的主鍵?插入行jdbc的主鍵?
我注意到this answer表示你可以通過調用SELECT LAST_INSERT_ID()
得到它,我認爲你可以調用SELECT @@IDENTITY AS 'Identity';
有沒有一種常見的方法來在jdbc中跨數據庫執行此操作?
如果不是這樣,你會建議我爲一段可以訪問任何SQL Server,MySQL和Oracle的代碼實現這個功能嗎?
從我的代碼複製:
pInsertOid = connection.prepareStatement(INSERT_OID_SQL, Statement.RETURN_GENERATED_KEYS);
其中pInsertOid是一份準備好的聲明。
你就可以得到關鍵:
// fill in the prepared statement and
pInsertOid.executeUpdate();
ResultSet rs = pInsertOid.getGeneratedKeys();
if (rs.next()) {
int newId = rs.getInt(1);
oid.setId(newId);
}
希望這給你一個很好的起點。
對於oracle,如果您已經爲PKEY值生成映射了一個序列,Hibernate將使用序列中的NEXT_VALUE。
不知道它做什麼的MySQL或MS SQL服務器
你試過了Statement.executeUpdate()和Statement.getGeneratedKeys()方法呢?有一個提到這種方法的developerWorks article。
另外,在JDBC 4.0中,Sun添加了row_id feature,它允許您在一行上獲得唯一的句柄。該功能由Oracle和DB2支持。對於sql server,您可能需要第三方驅動程序,如this one。
祝你好運!
Spring提供了一些有用的支持this operation和參考指南似乎回答你的問題:
沒有一個標準的單一方式 創建一個適當的 PreparedStatement的(這可以解釋爲什麼 的方法簽名它的方式是 )。這對甲骨文 工作,不得在其他平臺上 是工作的一個例子...
我測試過在MySQL這個例子中,它在那裏工作過,但我不能在其他平臺上說話。
對於符合SQL-99,可以使用標識列數據庫: CREATE TABLE sometable(始終產生身份ID整數(從101開始)PRIMARY KEY,...
使用getGeneratedKeys()檢索剛插入executeUpdate(String sql, int autoGeneratedKeys)鍵使用是Statement.RETURN_GENERATED_KEYS的第二個參數的executeUpdate()
extraneon的答案,雖然正確,不適合甲骨文工作。
您甲骨文做到這一點的方法是:
String key[] = {"ID"}; //put the name of the primary key column
ps = con.prepareStatement(insertQuery, key);
ps.executeUpdate();
rs = ps.getGeneratedKeys();
if (rs.next()) {
generatedKey = rs.getLong(1);
}
只是聲明ID列ID整數NULL主鍵auto_increment
在此之後執行該代碼
ResultSet ds=st.executeQuery("select * from user");
while(ds.next())
{
ds.last();
System.out.println("please note down your registration id which is "+ds.getInt("id"));
}
ds.close();
以上代碼會告訴你當前行的編號
如果你rem ove ds.last()
比它會顯示id列的所有值
適用於Postgres,但不適用於Oracle – 2016-03-14 15:22:20
在Sybase ASE上,只要您已安裝元數據存取器信息表,就可以工作。否則,你必須使用`@@ identity`。 – danny 2016-09-09 08:32:33