2013-03-05 81 views
2

我對Java中的Prepared Statement有疑問,因爲我對它不瞭解太多。如何在executeBatch()之前檢查Prepared Statement是否有批處理?

我有,我有在使用PreparedStatement的使用情況。但我只是在寫代碼前想:

while(...) 
{ 
    if(...) 
    { 
    preparedStatement.setString(1, fname); 
    preparedStatement.setString(2, lname); 
     ... 
    preparedStatement.addBatch(); 
    } 
} 
preparedStatement.executeBatch(); 

讓我們考慮上面的代碼。有一個while循環會做一些東西,然後檢查一些條件,然後在準備好的語句中添加批處理。

1)所以,我的問題是,該批次的假設沒有在事先準備好的聲明,並將我還是說executeBatch。它會給我例外還是會罰款?

2)是否有檢查的PreparedStatement批處理執行前的任何方法?

謝謝。

+0

嘗試執行它,看看它說什麼! – SudoRahul 2013-03-05 10:16:47

回答

2

它應該只是正常工作,並返回一個空數組。要知道目前添加的批次是否唯一方法是AFAIK,以便自己跟蹤它們。

如果在另一方面,你只想知道有多少語句,你居然執行,那麼你就可以使用返回檢查有多少查詢被執行的更新計數的數組,個人價值在其中看到如果他們成功的話,他們每個人。有關更多詳細信息,請參閱executeBatch()的文檔。

+1

你是對的@wds我們應該跟蹤它,但我認爲應該有像count或hasBatches這樣的方法,就像我們可以通過它來了解它有多少聲明。感謝您的答覆。 :) – 2013-03-05 10:41:03

1

你不必擔心處理這個情況。一旦你熟悉了寫作的API,你應該期望標準的Javadoc會給你一個throws子句:

拋出:SQLException - 如果發生數據庫訪問錯誤,這種方法 被稱爲在一個封閉的語句或驅動程序不支持批處理 語句。如果發送到數據庫的某個命令執行不正確 或嘗試返回結果set.SQLTimeoutException - 如果 驅動程序確定由 setQueryTimeout指定的超時值,則拋出BatchUpdateException(SQLException的子類) 方法已經被超過,至少已經試圖 取消當前正在運行的聲明

而且,如果你是持懷疑態度,考慮返回類型,int[] java.sql.Statement.executeBatch() 期望對象爲空的API中,和標準的基元/基類型返回空值或初始化值

隨着WDS說,它應該返回一個空的int數組。

0
if(preparedstatement.executeBatch().length == 0){ 
//do somethimg 
} 

基本上測試,如果該批次沒有聲明;-)

+0

雖然這可能會回答這個問題,但僅有代碼的答案是令人不悅的。請給OP解釋你的答案。 [如何回答](https://stackoverflow.com/help/how-to-answer) – JNYRanger 2017-06-28 18:04:09

相關問題