Java JDBC – 多个预准备语句批量插入

使用JDBC(Oracle)我需要在两个表中的每一个中插入大约一千行。 像这样的东西:

"INSERT INTO TABLE_A (A_ID, A_NAME, A_LAST_NAME) VALUES (MY_SEQUENCE.NEXTVAL, ?, ?)"; "INSERT INTO TABLE_B (B_ID, B_DESCRIPTION) VALUES (MY_SEQUENCE.CURRVAL, ?)"; 

问题是两个表都是通过共同的顺序连接的,因此语句的顺序很重要。

如果我只有一张桌子那就很容易了。 在那种情况下我使用了代码:

 String insert = "Insert into TABLE_A(A_ID, A_NAME, A_LAST_NAME) values(MY_SEQUENCE.NEXTVAL, ?, ?)"; conn.setAutoCommit(false); PreparedStatement ps = conn.prepareStatement(insert); for(MyObject obj : myCollection) { ps.setString(1, obj.getName()); ps.setString(2, obj.getLastName()); ps.addBatch(); } ps.executeBatch(); conn.commit(); ps.close(); 

但是这种方法只能使用一个准备好的语句,因此只能使用一个插入。 我该如何为这个问题提供解决方案?

你可以试试

 PreparedStatement ps = conn.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS); ... ps.executeBatch(); 

然后

 ResultSet rs = ps.getGeneratedKeys(); ps = conn.prepareStatement("INSERT INTO TABLE_B (B_ID, B_DESCRIPTION) VALUES (?, ?)"); for ( int counter =0;rs.next(); counter++ ) { ps.setInt(1,rs.getInt(0)); ps.setString(2, myCollection.get(counter).getDescription()); ps.addBatch(); } ... 

如果我正确理解你的问题,你有NEXTVAL和CURRVAL的问题,因为CURRVAL可能会因其他数据库使用而改变吗? 如果是这样,您可以将代码更改为此订单:

 currentNextVal = select NEXTVAL INSERT into table_a with currentNextVal as the id INSERT into table_b with the same currentNextVal 

我是否正确理解了您的问题?