簡體   English   中英

如何從JDBC中的SQL獲取sequence.nextval?

[英]How to get sequence.nextval from SQL in JDBC?

我有 5 個表,我在其中使用相同序列的下一個值。 問題是,后續表獲得的值比以前的表大。

我的代碼是這樣的:

String sql = "INSERT INTO table1(id, name) VALUES (id_seq.nextval, ?)"; 
ps.setString(1, "bar"); 
ps.executeUpdate();     
sql = "INSERT INTO table2(id, name) VALUES (id_seq.nextval, ?)";
ps.setString(1, "tar"); 
ps.executeUpdate();
sql = "INSERT INTO table3(id, name) VALUES (id_seq.nextval, ?)";
ps.setString(1, "par"); 
ps.executeUpdate();
sql = "INSERT INTO table4(id, name) VALUES (id_seq.nextval, ?)";
ps.setString(1, "car"); 
ps.executeUpdate();
sql = "INSERT INTO table5(id, name) VALUES (id_seq.nextval, ?)";
ps.setString(1, "rar"); 
ps.executeUpdate();

我的順序是這樣的:

CREATE SEQUENCE  "ID_SEQ"  MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1         START WITH 10 CACHE 20 NOORDER  NOCYCLE ;

現在,當我查看我的表時,table1 的 ID 為 10,但 table2 的 ID 為 11,table3 的 ID 為 12..... 我希望所有表的 ID 都相同。 我該怎么辦? 先感謝您。

編輯:必須包含多於 2 個表才能有更一般的問題

其實我在網上找到了答案。 我需要這樣做:

String sql = "select ID_SEQ.nextval from DUAL";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next())
    int nextID_from_seq = rs.getInt(1);

當我將此值插入數據庫時​​,我輸入:

String sql2 = "INSERT INTO table1(id, name) VALUES (?, ?)"; 
ps.setInt(1, nextID_from_seq); 
ps.setString(2, "tar");
ps.executeUpdate();     
sql2 = "INSERT INTO table2(id, name) VALUES (?, ?)";
ps.setInt(1, nextID_from_seq); 
ps.setString(2, "par");
ps.executeUpdate();
...
...

第一個字符串 sql 是“select ID_SEQ.nextval from DUAL”。 最后那個“DUAL”不是表名或任何東西。 它只是 oracle 給定或提供的功能之一。 我可以通過使用它來獲得任何序列的 nextval。

您可以將id_seq.currval用於第二個表。 它將重用相同的 id。

sql = "INSERT INTO table2(id, name) VALUES (id_seq.currval, ?)";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM