2013-02-01 91 views
1

我寫了下面的方法來執行數據庫中的更新語句:SQL異常:參數指標超出範圍

public boolean updateEmployee(int id){ 
    try { 
     String update="UPDATE employee set name='updatedName' and address='updatedaddress' where id=(?)"; 
     pst=connection.prepareStatement(update); 
     pst.setInt(1, id); 
     pst.executeUpdate(); 

    } catch (SQLException ex) { 
     Logger.getLogger(DAO.class.getName()).log(Level.SEVERE, null, ex); 
     return false; 
    } 
    return true; 
} 

但出現以下異常:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). 

而此異常也扔:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'UpdatedName' 

這裏有什麼問題?另外,如何返回更新語句的結果(因爲executeQuery不適用於DML語句)?

+0

你爲什麼使用這個「id =(?)」?只是「id =?」是不足夠的? 我並不是說這是錯的,好嗎?這是因爲我不記得JDBC PreparedStatements中的參數。從我記得,括號是沒有必要的... –

回答

2

我可能是錯的,但也許是說法應該是

UPDATE employee set name='updatedName' , address='updatedaddress' where id=(?) 

,而不是

UPDATE employee set name='updatedName' and address='updatedaddress' where id=(?)

and應在where子句中才能使用。

5

看起來像一個未封閉的報價問題?

name='updatedname and address 
+0

com.mysql.jdbc.MysqlDataTruncation:數據截斷:截斷不正確DOUBLE值:'updatedname' –

+0

@Eslam ..檢查數據庫中'name'列的類型。我懷疑你把它設置爲Double。它應該是Varchar。 –

+0

不,我把它設置爲一個varchar! –