gpt4 book ai didi

java - JDBC 多批执行问题

转载 作者:行者123 更新时间:2023-12-02 05:44:02 24 4
gpt4 key购买 nike

以下代码尝试执行 3 批插入。第二批的第二条语句是故意错误的(INSERTD)。当我运行这个程序时,应该执行第一批和第三批,并将数据插入数据库。

但它没有插入数据。有人能告诉为什么吗?我该如何修复以便无论其他批处理如何都应该执行正确的批处理。

public class Test {

public static void main(String[] args) throws SQLException, ClassNotFoundException {

ArrayList<String> finalsql1 = new ArrayList<String>();
finalsql1.add("INSERT INTO M_TEST VALUES('PUJAN1','WRL')");
finalsql1.add("INSERT INTO M_TEST VALUES('PUJAN2','WRL')");

ArrayList<String> finalsql2 = new ArrayList<String>();
finalsql1.add("INSERT INTO M_TEST VALUES('PUJAN1','WRL')");
finalsql1.add("INSERTD INTO M_TEST VALUES('PUJAN2','WRL')");

ArrayList<String> finalsql3 = new ArrayList<String>();
finalsql1.add("INSERT INTO M_TEST VALUES('PUJAN1','WRL')");
finalsql1.add("INSERT INTO M_TEST VALUES('PUJAN2','WRL')");

System.out.println("OP1=" + insertEntity(finalsql1));
System.out.println("OP2=" + insertEntity(finalsql2));
System.out.println("OP3=" + insertEntity(finalsql3));

}

public static boolean insertEntity(ArrayList<String> finalsql) throws SQLException {
Connection conn = null;
Statement ps = null;
boolean result = false;

try {
conn = getConnection();
conn.setAutoCommit(false);
ps = conn.createStatement();
for (String sql : finalsql) {
System.out.println("sql > " + sql);
ps.addBatch(sql);
}
int[] count = ps.executeBatch();

result = true;
} catch (Exception e) {
conn.rollback();
e.printStackTrace();
result = false;
} finally {
conn.commit();
ps.close();
conn.close();
}
return result;
}
}

输出

OP1=true

OP2=假

OP3=true

最佳答案

只有一批包含任何数据的插入,其中包括 INSERTD,因此它正在回滚。为什么?原因如下:

ArrayList<String> finalsql2 = new ArrayList<String>();
finalsql1.add("INSERT INTO M_TEST VALUES('PUJAN1','WRL')");
finalsql1.add("INSERTD INTO M_TEST VALUES('PUJAN2','WRL')");

您仍在此处向 finalsql1 添加条目,因此 finalsql2finalsql2 为空。

finalsql1 拥有所有条目,包括故意错误,因此全部都被回滚。

关于java - JDBC 多批执行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24259152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com