我認爲這個問題總結得不錯,這是我的代碼,但它沒有給我所需的結果。我想返回一個int數組,其中包含爲該批次中創建的每一行生成的自動遞增ID。如何知道使用JDBC爲批量更新創建的自動增量值?
CREATE_APPOINTMENT = database.prepareStatement("INSERT INTO " + TABLE_APPOINTMENTS + " VALUES (?, ?, ?, ?, ?)");
public static int[] createAppointment(Appointment... appointments) {
int[] ids = new int[appointments.length];
int count = 0;
try {
for (Appointment a : appointments) {
CREATE_APPOINTMENT.setDate(2, a.date);
CREATE_APPOINTMENT.setTime(3, a.time);
CREATE_APPOINTMENT.setInt(4, a.duration);
CREATE_APPOINTMENT.setString(5, a.clientName);
CREATE_APPOINTMENT.addBatch();
}
CREATE_APPOINTMENT.executeBatch();
ResultSet resultSet = CREATE_APPOINTMENT.getGeneratedKeys();
if (resultSet != null)
while (resultSet.next()) {
ids[count++] = resultSet.getInt(1);
}
} catch (SQLException ex) {
System.err.println(ex);
}
return ids;
}
我試圖創建根據數據庫8個約會和他們的ID是成功創建,但我返回數組只包含最後一個ID,其餘均爲零。我在哪裏錯過了什麼?
如果沒有,您可以隨時執行查詢'SELECT last_insert_rowid()'。 –
@CL不會返回最後一次插入的行ID嗎?我認爲這個問題是關於批量插入的。另外,即使在單一插入場景中,我認爲它只在隔離級別保證你只能看到你自己的最後一個插入時才起作用。 –
是的,使用批處理時,您需要JDBC驅動程序中的支持。 –