다음 코드는 3 개의 배치 삽입을 시도합니다. 두 번째 배치의 두 번째 구문은 의도적으로 잘못되었습니다 (INSERTD). 이 프로그램을 실행하면 첫 번째와 세 번째 배치가 실행되고 데이터가 데이터베이스에 삽입되어야합니다.JDBC 복수 배치 실행 문제
하지만 데이터를 삽입하지 않습니다. 누군가가 이유를 말할 수 있습니까? 그리고 다른 일괄 처리에 관계없이 올바른 일괄 처리가 실행되도록 수정하는 방법은 무엇입니까? 출력
OP1
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;
}
}
= 사실
OP2 = 거짓
OP3 = 사실
. 그래서 첫 번째 배치의 트랜잭션은 성공해야합니까? –
그 테이블'M_TEST'은 비어 있습니까? – Andremoniy
예 M_TEST가 비어 있습니다. –