2017-04-07 106 views
-2

所以我使用jdbc並在更新我的數據庫表後嘗試從execute(sql)方法獲取布爾返回值。以下是代碼:從JDBC獲取布爾值

try{ 
    Statement stmt = conn.createStatement(); 
    String sql = "update emp_earnings set salary = 6400 where lower(name)= 'bob'"; 
    Boolean result = stmt.execute(sql); 
    System.out.println("rows affected (Y/N): " + result); 
}catch(Exception e){ 
    System.out.println("some error in second"); 
    e.printStackTrace(); 

} 

當我在db表檢查,工資已經更新,但execute(sql)返回一個「假」。 儘管​​正在完成其工作,但我得到的結果爲'false'。 我檢查了網絡,它說它應該返回'真正'如果工作。 executeUpdate()返回'沒有受影響的行'罰款時,我用相同的代碼而不是​​,並提供所需的輸出。 我在做什麼錯?

+0

查找此類問題答案的最佳位置是[JDBC數據庫訪問](https://docs.oracle.com/javase/tutorial/jdbc/)教程和[JavaDocs](https:/ /docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#execute-java.lang.String-) – MadProgrammer

+3

*「我在做什麼錯了?」*您沒有閱讀文檔['execute()'](https://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#execute-java.lang.String-),因爲它說:* **如果第一個結果是ResultSet對象,則返回** true; **如果是更新計數**,或者沒有結果*,則爲false。 ---如果你想更新計數,你應該調用['executeUpdate()'](https://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html#executeUpdate-java .lang.String-):*返回行數*。 – Andreas

+0

這與[PL/SQL](https://stackoverflow.com/tags/plsql/info)或[PL/SQL Developer](https://stackoverflow.com/tags/plsqldeveloper/info)有什麼關係? ? –

回答

1

documentation

布爾執行(字符串SQL)拋出的SQLException

返回:

真如果第一結果爲ResultSet對象;假如它是一個 更新計數或沒有結果

在這裏你正在運行一個執行方法內的更新命令,它將返回更新計數。所以它會返回錯誤的更新計數。

+0

謝謝薩欽。那就回答吧! –

0

我認爲你實際上想要做int result = stmt.executeUpdate(sql);這將返回受影響的行數,如果更新沒有改變任何行,這就是0。