2014-08-13 2 views
0

Может ли кто-нибудь сказать мне, почему я получил следующую ошибку для синтаксиса ниже? Благодарю.java.sql.SQLException: [Microsoft] [ODBC Microsoft Access Driver] Синтаксическая ошибка в инструкции UPDATE

java.sql.SQLException: [Microsoft] [ODBC Microsoft Access Driver] Синтаксическая ошибка в инструкции UPDATE.

stmt = conn.prepareStatement("UPDATE STAFFDIR " + 
         "SET Last_Name = ?, " + 
         "SET First_Name = ?, " + 
         "SET Phone = ?, " + 
         "SET Dept_Code = ?, " + 
         "SET Email = ?, " + 
         "SET Title = ?, " + 
         "SET Loc_Code = ? " + 
         "WHERE ID = ?;"); 

       stmt.setString(1, ID); 
       stmt.setString(2, Last_Name); 
       stmt.setString(3, First_Name);     
       stmt.setString(4, Phone); 
       stmt.setString(5, Dept_Code); 
       stmt.setString(6, Email); 
       stmt.setString(7, Title); 
       stmt.setString(8, Loc_Code); 
       stmt.executeUpdate(); 
+1

У вас есть ключевое слово SET на каждой строке. Только сохраните первый. –

ответ

1

Оператор обновления в Sql не требует только один SET независимо от того, сколько полей установлены, а именно

UPDATE STAFFDIR SET Last_Name = ?, 
        First_Name = ?, -- No extra set 
        Phone = ?, ... 

Как и в сторону, вы используете правильный драйвер (MS Access против Sql Server)?

+0

Спасибо. Это сделал трюк. – user3511659

+0

Да, я использую Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); \t conn = DriverManager.getConnection ("jdbc: odbc: Driver = {Microsoft Access Driver (* .mdb, * .accdb)}; DBQ = C: /test.accdb"); – user3511659

0

Должно быть только одно SET. Делают это следующим образом

stmt = conn.prepareStatement("UPDATE STAFFDIR " + 
         "SET Last_Name = ?, " + 
         "First_Name = ?, " + 
         "Phone = ?, " + 
         "Dept_Code = ?, " + 
         "Email = ?, " + 
         "Title = ?, " + 
         "Loc_Code = ? " + 
         "WHERE ID = ?;"); 
0

Ваш запрос необходим только один набор и вы связываете параметры в неправильном порядке -

stmt = conn.prepareStatement("UPDATE STAFFDIR " + 
    "SET Last_Name = ?, First_Name = ?, Phone = ?, " + 
    "Dept_Code = ?, Email = ?, Title = ?, Loc_Code = ? " + 
    "WHERE ID = ?"); 
int i = 1; 
// stmt.setString(1, ID); 
stmt.setString(i++, Last_Name); 
stmt.setString(i++, First_Name);     
stmt.setString(i++, Phone); 
stmt.setString(i++, Dept_Code); 
stmt.setString(i++, Email); 
stmt.setString(i++, Title); 
stmt.setString(i++, Loc_Code); 
stmt.setString(i++, ID); // <-- the 8th field. 

Также стоит отметить, что Java 8 удаляет ODBC-JDBC мост, поэтому вам может потребоваться найти альтернативный метод подключения к вашему источнику данных.

+0

В ретроспективе он фактически не сделал обновления, он ничего не делает, но синтаксическая ошибка исчезла. Зачем мне переводить ID на 8-ю позицию? – user3511659

+0

@ user3511659 Поскольку вы * должны * связывать параметры в том же порядке, что и в вашем запросе. –

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