2013-01-16 27 views
-1

錯誤:捕獲到異常:java.sql.SQLException中:不正確的整數值:

Exception caught : java.sql.SQLException: Incorrect integer value: '[Ljava.lang.String;@26fd19c6' for column 'dedId' at row 1 The database could not be connected

方案

public void updateDeduction(int empId, String[] dedId, String dedName, String dedDate, String dedAmount) throws SQLException{ 
    stmt = conn.createStatement(); 
    String updateString="INSERT INTO deductions (empId,dedId,dedName,dedDate,dedAmount) VALUES ("; 
    updateString +="'"+empId+"', "; 
    updateString +="'"+dedId+"', "; 
    updateString +="'"+dedName+"', "; 
    updateString +="'"+dedAmount+"', "; 
    updateString +="CURDATE())" ; 
    stmt.executeUpdate(updateString); 
    return; 
} 
+3

[**小博表警報**!(http://xkcd.com/327/) - 不串聯SQL語句一起 - 這只是**要求**的麻煩.... –

+0

我不明白爲什麼是SQL異常顯示? – XAH

+0

Zain [檢查了這一點:)](http://stackoverflow.com/questions/14169162/exception-caught-java-sql-sqlexception-column-count-doesnt-match-value-count)+1 @marc_s – bonCodigo

回答

2

參數dedid是一個字符串數組。執行時

updateString +="'"+dedId+"', "; 

它被轉換爲字符串[Ljava.lang.String;@26fd19c6

你需要弄清楚你想使用哪個數組元素。

正如其他人所評論的那樣,通過連接用戶提供的文本來構建一個聲明是一種可以通過SQL Injection進行黑客入侵的可靠方法。你應該使用PreparedStatement而是用佔位符,即

INSERT INTO deductions (empId,dedId,dedName,dedDate,dedAmount) VALUES (?,?,?,?,?) 
+0

關於SQL注入和使用'PreparedStatment',它會自動去除任何不安全的字符,還是仍然留給程序員? – Logan

+0

「不安全字符」的存在並不重要,因爲值不會被替換爲SQL文字。他們直接進入文本值,不能修改SQL。 –