SQL异常:索引超出范围

问题描述:

当我运行我的程序时,它显示列超出范围的错误。连接正常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://*.com/questions/20008336/having-a-column-name-as-input-parameter -'--------------------------- - “ –

+1

SET'studentid'=?'是无效的SQL。列名需要用双引号括起来,而不是单引号(或者根本没有引号) –

我认为你错了代码语句。请尝试以下。

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

它作品。你呢 –

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

好的,我会试试。谢谢你的帮助 –

更改您的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