2015-06-13 54 views
0

我有5個表,我使用相同的序列的下一個值。問題是,後面的表格比以前的表格獲得更大的價值。如何從JDBC中的SQL獲取sequence.nextval?

我的代碼是這樣的:

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 ; 

現在,當我看着我的表,表1的編號是10,但表2的ID是11分表3的ID是12 .....我希望所有表格的ID都相同。我該怎麼辦? 預先感謝您。

編輯:必須包含多個表超過2有更普遍的問題

回答

1

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

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); 

當我插入這個值的數據庫,我鍵入此:「從DUAL選擇ID_SEQ.nextval」

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是這個「DUAL」最終不是表名或任何東西。它只是oracle提供的或提供的功能之一。我可以通過使用它來獲得任何序列的nextval。 我希望這個答案。感謝所有人試圖回答我的問題。

1

可以使用id_seq.currval第二個表格。它將重用相同的ID。

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

但是如果我有第三張桌子呢?或超過3-4桌?我想爲所有這些表使用相同的ID?必須有另一種方式?謝謝 –

+0

也許是一個過時的問題,但您可以重複使用它插入所有語句。 例如: '插入所有 到表2(ID,姓名)值(id_seq.currval,?) 到表2(ID,姓名)值(id_seq.currval,?) 到表2(ID,姓名)值(id_seq.currval,?) ..... 從2中選擇1;' 選擇部分是強制性的。它的工作原理是因爲oracle將它作爲單個語句,因此不會遞增nextval序列。 – Artur

相關問題