2014-03-05 68 views
2

我們有一個java數據庫抽象,爲我們做了一些插入。在運行時我們將知道表名,要插入的列名和值。從那我們產生一個準備好的陳述並且做插入。Postgresql,使用JDBC插入後獲取生成的序列

在sql server land中,我們將選擇id = @@ identity到生成的sql的結尾,以獲取由查詢返回的新生成的id。

現在我們正在遷移到postgres,這不再有效。這是我的理解是,在Postgres的你可以做,

insert into foo(a, b) values('a', 'b') returning ID 

我們的問題是,在運行時,我們並不知道ID列的名稱我們也不知道該序列的名稱。有沒有辦法一般地獲得新插入序列的值而不知道序列的名稱或列的名稱?

+0

可能重複[如何得到最後插入的行的值?(http://stackoverflow.com/問題/ 241003 /如何從最後插入的行中獲取值) –

+0

請注意,'getGeneratedKeys()'選項是執行此操作的一般Java方法。關於鏈接問題的答案不是'jdbc-way'。 –

+0

@MarkRotteveel不是一個騙子,在這個例子中,你知道你想要返回的列的名字,在我們的情況下,我們不知道。它可能是一個表的foo_id,另一個表可能是bar_id。我已經通過關閉自動提交併在同一連接中執行兩條語句來獲得新鑄造的標識來實現它。 – dstarh

回答

2

如果insert沒有觸發進一步的插入,您可以insert語句之後使用權SELECT LASTVAL();

+0

lastval()是由連接產生的最後的值? – dstarh

+0

lastval()返回最近一次用nextval獲得任何序列:http://www.postgresql.org/docs/current/static/functions-sequence.html – Houari

+0

感謝剛發現有我的方式 – dstarh

相關問題