2014-01-16 279 views
6

JdbcTemplate.update()返回受影響的行數 - 因此您不僅知道刪除/更新已成功,還知道有多少行被刪除/更新。JdbcTemplate.update()插入返回值

如果我嘗試插入一行,返回值是什麼。

是否有可能得到返回值爲「0」?

private static final String insertSql = 
"INSERT INTO employee (" + 
" name, " + 
" surname, " + 
" title, " + 
" created) " + 
"VALUES (John, Smith, Software developer, new Date())"; 
int row = template.update(insertSql, params, types); 

回答

1

是,從理論上講,你應該得到0或1,但是如果沒有行被插入時,它會是因爲一個錯誤,所以DataAccessException會被拋出,這是你將如何知道出事了並沒有創建行。

+0

實際上,在考慮它時,也會出現數據截斷警告和拋出異常的情況,但該行將被保存,因此計數應爲1。 – Turophile

0

要回答你的問題,是的,正如@Turophile指出的那樣,你會得到0或1的迴應,你可以從method signature得知(它返回一個int)。

爲了響應@Turophile comment(抱歉,我不能添加註釋:/),爲避免這種情況並避免將部分數據保存到數據庫,請使用Springs Transaction Management(tx)。這將允許您基於特定的異常或Exception類的所有異常回滾事務。請注意,默認情況下,@Rollback將回滾事務作爲運行時,未經檢查的例外僅限於

@Transactional(rollbackFor = Exception.class) 
public Employee updateEmployee(Employee pEmployee) { ... } 

的@Transactional也可以添加到類爲好,但我會read up more on it如果你有興趣在實現此功能。 tx上有很多很好的文檔。

作爲一個便箋,我不建議對你的方法的調用者說謊。如果您調用一個名爲「update」的方法,請運行一個將更新記錄的查詢,如果要插入/創建新記錄,請創建或調用一個將新記錄「插入」表的方法 - 插入如果主鍵是唯一的,則重複記錄不會起作用。

1

正如我們所知,jdbctemplate.update將以整數格式返回。 ,以便找到0或1只是這樣做如下簡單的代碼

int i=jdbctemplate.update(.your db call..); 

它將返回1成功,0失敗情況下的話,根據它,你可以處理你的邏輯。