aga*_*gav 13 java jdbc prepared-statement
使用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, ?)";
Run Code Online (Sandbox Code Playgroud)
问题是两个表都是通过共同的顺序连接的,因此语句的顺序很重要.
如果我只有一张桌子就很容易了.在那种情况下,我使用了代码:
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();
Run Code Online (Sandbox Code Playgroud)
但是这种方法只能使用一个准备好的语句,因此只能使用一个插入.我该如何为这个问题提供解决方案?
Cli*_*int 13
你可以试试
PreparedStatement ps = conn.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);
...
ps.executeBatch();
Run Code Online (Sandbox Code Playgroud)
然后
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();
}
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27527 次 |
最近记录: |