2015-04-02 64 views
1

當我執行在Java statement.executeBatch()方法,其返回值爲int數組作爲2聲明則ExecuteBatch方法返回的值陣列2

JDBC的規格具有以下說關於該報稅表批量更新的代碼:

■0或者更大

■Statement.SUCCESS_NO_INFO

■-2

但是,那時我每次獲取爲2. 記錄從數據庫中成功刪除,並從滿足查詢的兩個表中刪除25條記錄。但是,在系統輸出它顯示了受影響的記錄值2

Connection conn = null; 
    Statement stmt = null; 
    try { 
     Class.forName(JDBC_DRIVER); 
     conn = DriverManager.getConnection(CONNECTION_URL, USERNAME, PASSWORD); 
     stmt = conn.createStatement(); 
     System.out.println("trying to execute query"); 

     stmt.addBatch("DELETE FROM TABLE1 WHERE CRTE_TSTP < TRUNC(SYSDATE) - 14"); 
     stmt.addBatch("DELETE FROM TABLE2 WHERE RECV_TSTP < TRUNC(SYSDATE) - 14"); 

     int affectedRecords[] = stmt.executeBatch();    
     conn.commit(); 

     System.out.println("number of rows deleted " + affectedRecords.length); 

    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

}

回答

3

你所得到的陣列,而不是實際的int類型的長度。您是否嘗試過計算返回數組元素的刪除總和?例如:

int affectedRecordsSum = affectedRecords[0] + affectedRecords[1]; 
System.out.println("number of rows deleted " + affectedRecordsSum); 
+0

allu:Thanks.It有效 – 2015-04-02 10:34:16

0

也許你正在使用它錯了:

INT []則ExecuteBatch()拋出的SQLException

將一批命令提交給數據庫來執行,如果全部命令執行成功,返回更新計數數組。返回數組的int元素的順序與批處理中的命令相對應,這些命令按照它們添加到批處理的順序進行排序。由executeBatch方法返回的數組中的元素可能是下列之一:

1)大於或等於零的數字 - 表示該命令已成功處理,並且是更新計數,給出了行數在受命令執行影響的數據庫中

2)SUCCESS_NO_INFO的值 - 表示命令已成功處理,但受影響的行數未知 如果批量更新中的某個命令無法執行正確執行,此方法拋出BatchUpdateException,並且JDBC驅動程序可能會或可能不會繼續處理批處理中的其餘命令。但是,驅動程序的行爲必須與特定的DBMS保持一致,要麼始終繼續處理命令,要麼永遠不會繼續處理命令。如果驅動程序在發生故障後繼續處理,則由方法BatchUpdateException.getUpdateCounts返回的數組將包含與批處理中的命令一樣多的元素,並且至少有一個元素如下所示:

3)A EXECUTE_FAILED的值 - 表示命令未能成功執行,並且僅在驅動程序在命令失敗後繼續處理命令時發生