Java sẽ không cho phép bạn chỉ thêm? trong tham số chuỗi chuẩn bị sẵn sàng, như nó mong đợi là? chỉ dành cho trình giữ chỗ cho các tham số của SQL cung cấp.
Đối với trường hợp của bạn, bạn có thể phải có 2 đối tượng câu lệnh đã chuẩn bị sẵn và trong vòng lặp lại, bạn có thể đưa ra quyết định nên gọi đối tượng nào. Vì vậy, nó sẽ giống như dưới đây:
PreparedStatement insertPstmt = connection.prepareStatement("INSERT INTO MY_TABLE VALUES(?,?,?,?)");
PreparedStatement updatePstmt = connection.prepareStatement("UPDATE MY_TABLE, SET MY_VAL=? WHERE MY_VAL IS NULL");
While (<condition>) {
If (<insert condition>) {
// use insert pstmt and add batch
} else {
// use update pstmt and add batch
}
}
insertPstmt.executeBatch();
updatePstmt.executeBatch();
nếu bạn có bất kỳ chèn nào, phụ thuộc vào bản cập nhật, bạn có thể thực thi các lô tương ứng. Điều này sẽ đảm bảo rằng bản cập nhật sẽ hoạt động chính xác. Tôi sẽ nghĩ đến việc thực thi chèn trước, vì chúng có thể không phụ thuộc vào cập nhật.