Java 获取要存储在其他表中的当前序列Id
我们有多个表,所有表都与第一个表的主键(例如:id)相关。Id被配置为序列,在将数据插入第一个表时,我们在插入查询中使用Java 获取要存储在其他表中的当前序列Id,java,oracle,sequence,spring-jdbc,jdbctemplate,Java,Oracle,Sequence,Spring Jdbc,Jdbctemplate,我们有多个表,所有表都与第一个表的主键(例如:id)相关。Id被配置为序列,在将数据插入第一个表时,我们在插入查询中使用sequence.nextval。 现在,在向其他表插入数据时,如何获取当前序列值或当前Id 我们尝试了以下选项: sequence.currval,直接在insert语句中 2.从dual中选择sequence.currval 以上两个选项在使用getJdbcTemplate().update()时引发错误 是否有人可以建议如何在将数据插入第一个表后将当前序列值传递给其他表?
sequence.nextval
。
现在,在向其他表插入数据时,如何获取当前序列值或当前Id
我们尝试了以下选项:
sequence.currval
,直接在insert语句中
2.从dual中选择sequence.currval
getJdbcTemplate().update()
时引发错误
是否有人可以建议如何在将数据插入第一个表后将当前序列值传递给其他表???如果要将相同的id(来自序列)插入不同的表,只需从第一个插入中获取它,然后在其他插入中使用它
PrepearedStatement stmt1 = conn.prepareStatement("INSERT INTO TABLE1 (id) VALUES(yoursequence.nextval)", Statemet.RETURN_GENERATED_KEYS);
stmt1.executeUpdate();
ResultSet rs = stmt1.getGeneratedKeys();
rs.next();
long id = rs.getLong(1);
PrepearedStatement stmt2 = conn.prepareStatement("INSERT INTO TABLE2 (id) VALUES(?)");
stmt2.setLong(1,id);
stmt2.executeUpdate();
如果在insert中使用nextval,则可以在同一会话中的后续语句中使用currval。如果您建议在插入测试中首先使用currval,那么它将不起作用。但是,在以后的声明中,你会发现currval有哪些错误?您是否可能对相关语句使用多个会话?(这也会给你带来FK问题)。显示更多的代码和错误,可能会提供更多关于您做错了什么的线索。