2015-09-27 5 views
1

Когда я запускаю свою программу, она показывает ошибку, что столбец выходит за пределы диапазона. Подключение нормальноSQL Exception: индекс за пределами допустимого диапазона

Для exmaple

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 -of-a-readystatement –

+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

Я понимаю, но все данные верны с коррекцией limiit в таблице –

+0

Я думаю, что неправильная вещь в запросе sql, возможно, в подготовленном состоянии –

+1

It работает. Than you –

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

Вам также нужно удалить имена столбцов '' 's вокруг столбца. В противном случае вы пытаетесь присвоить значения строкам, которые не будут работать. –

+0

right thaks @ Luke Woodward – Satya

+0

Хорошо, я попробую. Спасибо за помощь yor –

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

Это work.s. Спасибо –

+0

Хорошо, вы можете проголосовать за отработанные ответы. – roeygol

Смежные вопросы