如何在JDBC中从SQL获取sequence.nextval?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JDBC中从SQL获取sequence.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 ;
现在,当我查看我的表时,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是“从DUAL中选择ID_SEQ.nextval”。那个“DUAL”最终不是表名或任何东西。它只是oracle提供或提供的功能之一。我可以通过使用它获得任何序列的nextval。
另一答案
你可以使用id_seq.currval
作为第二个表。它将重用相同的id。
sql = "INSERT INTO table2(id, name) VALUES (id_seq.currval, ?)";
以上是关于如何在JDBC中从SQL获取sequence.nextval?的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 spring 应用程序上下文中从 jpa 获取 jdbc 数据源吗?
如何在 SQL Server 中从今天的日期获取 > 240 天的数据,其中某些记录的特定单元键在 240 天之内和之外