如何从 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 ;
现在,当我查看我的表时,表 1 的 ID 是 10,但表 2 的 ID 是 11,表 3 的 ID 是 12.....我希望所有表的 ID 都相同。我应该怎么办?
提前谢谢你。
编辑:必须包含超过 2 个表格才能提出更一般的问题
您可以使用 id_seq.currval
作为第二个 table。它将重复使用相同的 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"最后不是table名字什么的。它只是 oracle 给定或提供的功能之一。我可以通过使用它来获取任何序列的 nextval。
我有 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 ;
现在,当我查看我的表时,表 1 的 ID 是 10,但表 2 的 ID 是 11,表 3 的 ID 是 12.....我希望所有表的 ID 都相同。我应该怎么办? 提前谢谢你。
编辑:必须包含超过 2 个表格才能提出更一般的问题
您可以使用 id_seq.currval
作为第二个 table。它将重复使用相同的 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"最后不是table名字什么的。它只是 oracle 给定或提供的功能之一。我可以通过使用它来获取任何序列的 nextval。