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

Java 如何在JDBC中从SQL获取sequence.nextval?,java,mysql,jdbc,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

我有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 ;
我的顺序是这样的:

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的ID是10,但表2的ID是11,表3的ID是12。。。。。我希望所有表的ID都相同。我该怎么办? 先谢谢你


编辑:必须包含2个以上的表格才能有更一般的问题

第二个表格可以使用
id_seq.currval
。它将重用相同的id

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

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

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。

但是如果我有第三个表呢?还是超过3-4张桌子?我想对所有这些表使用相同的ID?一定有别的办法吗?Thanks可能是一个过时的问题,但您可以重复使用它insert all语句。例如:
将表2(id,名称)中的所有值(id,名称)插入表2(id,名称)中的所有值(id,名称)插入表2(id,名称)中的所有值(id,名称)插入表2(id,名称)中的所有值(id,名称)。。。。。从双重选择中选择1顺便说一下,选择零件是必需的。它之所以能够工作,是因为oracle将其作为一条语句,因此不会增加nextval序列。