2015-09-27 213 views
1

當我運行我的程序時,它顯示列超出範圍的錯誤。連接正常SQL異常:索引超出範圍

對於〔實施例

updateRecoredtoStudent(15, "Annies","Bot"," Ionia", "1/1/2013","firstname","Anny") 


private static void updateRecordToStudent(int studentid, String firstname, String lastname,String address, String dateofbirth, String cond_col, String cond_val) throws SQLException { 

    Connection dbConnection = null; 
    PreparedStatement preparedStatement = null; 

    String updateTableSQL = "UPDATE student SET 'studentid' = ? 'firstname' = ? 'lastname' = ? 'address' = ? dateofbirth' = ? WHERE ? = ?"; 
    try { 
     dbConnection = getDBConnection(); 
     preparedStatement = dbConnection.prepareStatement(updateTableSQL); 

        preparedStatement.setInt(1, studentid); 
     preparedStatement.setString(2, firstname); 
        preparedStatement.setString(3, lastname); 
        preparedStatement.setString(4, address); 
        preparedStatement.setString(5, dateofbirth); 
        preparedStatement.setString(6, cond_col); 
        preparedStatement.setString(7, cond_val); 


     // execute update SQL stetement 
     preparedStatement.executeUpdate(); 

     System.out.println("Record is updated to STUDENT table!"); 

    } catch (SQLException e) { 

     System.out.println(e.getMessage()); 

    } finally { 

     if (preparedStatement != null) { 
      preparedStatement.close(); 
     } 

     if (dbConnection != null) { 
      dbConnection.close(); 
     } 

    } 

} 


Student table contains 
-studentid(int-PK) 
-Firstname(String) 
-lastname(String) 
-Address(String) 
-Dateofbirth(String) 
+0

你有拼寫錯誤(缺少引號)。您也有錯誤的索引(多次5) – cghislai

+0

您不能將列名稱作爲準備語句中的參數 - http://stackoverflow.com/questions/20008336/having-a-column-name-as-input-parameter -'--------------------------- - 「 –

+1

SET'studentid'=?'是無效的SQL。列名需要用雙引號括起來,而不是單引號(或者根本沒有引號) –

回答

0

我認爲你錯了代碼語句。請嘗試以下。

String updateTableSQL = "UPDATE student SET 'studentid' = ? 'firstname' = ? 'lastname' = ? 'address' = ? dateofbirth' = ? WHERE " + cond_col + "= ?"; 
try { 
    dbConnection = getDBConnection(); 
    preparedStatement = dbConnection.prepareStatement(updateTableSQL); 

    preparedStatement.setInt(1, studentid); 
    preparedStatement.setString(2, firstname); 
    preparedStatement.setString(3, lastname); 
    preparedStatement.setString(4, address); 
    preparedStatement.setString(5, dateofbirth); 
    preparedStatement.setString(6, cond_val); 
+0

我認爲但是所有的輸入都正確,表中有相應的限制 –

+0

我認爲sql查詢中的錯誤,可能是在準備好的語句中 –

+1

它作品。你呢 –

1
String updateTableSQL = "UPDATE student SET studentid = ?, firstname = ?, lastname = ?, address = ?, dateofbirth = ? WHERE "+cond_col+" = ?"; 
preparedStatement.setInt(1, studentid); 
preparedStatement.setString(2, firstname); 
preparedStatement.setString(3, lastname); 
preparedStatement.setString(4, address); 
preparedStatement.setString(5, dateofbirth); 
preparedStatement.setString(6, cond_val); 

只有列值可以被設置。如果你想傳遞動態列名,你應該用查詢來連接它。列名之間缺少,還有一件事。

+1

你還需要刪除列名周圍的''''。否則,你試圖給字符串賦值,這是行不通的。 –

+0

@ tham @ Luke Woodward – Satya

+0

好的,我會試試。謝謝你的幫助 –

2

更改您的SQL語法是這樣的:

UPDATE table_name 
SET column1=value1,column2=value2,... 
WHERE some_column=some_value; 

所以你的SQL UPDATE查詢將是:

String updateTableSQL = "UPDATE student SET studentid=?, firstname=?, lastname=?, address=?, dateofbirth=? WHERE " + fieldName + " = ?"; 
+0

它的工作。謝謝你 –

+0

好,你可以投票贊成有效的答案。 – roeygol