如何从JDBC中的SQL获取sequence.nextval?

Far*_*raz 2 java mysql 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();
Run Code Online (Sandbox Code Playgroud)

我的顺序是这样的:

CREATE SEQUENCE  "ID_SEQ"  MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1         START WITH 10 CACHE 20 NOORDER  NOCYCLE ;
Run Code Online (Sandbox Code Playgroud)

现在,当我查看我的表时,table1 的 ID 为 10,但 table2 的 ID 为 11,table3 的 ID 为 12..... 我希望所有表的 ID 都相同。我该怎么办?先感谢您。

编辑:必须包含多于 2 个表才能有更一般的问题

Far*_*raz 5

其实我在网上找到了答案。我需要这样做:

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);
Run Code Online (Sandbox Code Playgroud)

当我将此值插入数据库时​​,我输入:

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();
...
...
Run Code Online (Sandbox Code Playgroud)

第一个字符串 sql 是“select ID_SEQ.nextval from DUAL”。最后那个“DUAL”不是表名或任何东西。它只是 oracle 给定或提供的功能之一。我可以通过使用它来获得任何序列的 nextval。