Java JDBC - 多个准备好的语句批量插入

标签 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, ?)";

问题在于两个表是通过公共(public)序列连接的,因此语句的顺序很重要。

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

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();
}
...

关于Java JDBC - 多个准备好的语句批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195665/

相关文章:

java - 识别文本中的正面和负面词语

java - 使 JDBC 调用为测试用例抛出 SQLException

java - setObject 和 null 的安全性

java - 将 byte[] 设置为 SQL 准备语句

java - 如何检查 boolean 变量的 null 条件

Java - 没有密码的用户的mysql访问被拒绝错误

java - Spring Boot 将 JSON 和简单属性传递给相同的映射

sql-server - 将 Logstash 连接到 SQL Server

mysql - 通过 JDBC Realm 的 Tomcat 6.0 管理器身份验证

java - 在参数化语句中使用 SQL 函数