![](/img/trans.png)
[英]Fire Sequence.nextval query using jdbctemplate in spring
[英]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.