java.sql.SQLException:[Microsoft] [ODBC Microsoft Access驱动程序] UPDATE语句中的语法错误

时间:2014-08-13 15:02:33

标签: java sql sql-server

任何人都可以告诉我为什么我收到以下语法的以下错误?感谢。

  

java.sql.SQLException:[Microsoft] [ODBC Microsoft Access驱动程序] 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(); 

3 个答案:

答案 0 :(得分:1)

无论设置了多少字段,Sql中的更新语句只需要一个SET,即

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

顺便说一下,您使用的是正确的驱动程序(MS Access vs Sql Server)吗?

答案 1 :(得分:0)

应该只有一个SET。请按以下步骤进行操作

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

答案 2 :(得分:0)

您的查询只需要一个SET ,您将以错误的顺序绑定参数 -

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桥接器,因此您可能需要考虑寻找一种连接到DataSource的替代方法。