1

我在执行“ mvn tomcat:run”时遇到错误。我遇到的错误是:

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO ibstechc_dev.device (key, ip_address, type, name)  VALUES (?, ?, ?, ?)]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key, ip_address, type, name)  VALUES ('abcd', 'abcd', 1234, 'abcd')' at line 1

root cause

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO ibstechc_dev.device (key, ip_address, type, name)  VALUES (?, ?, ?, ?)]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key, ip_address, type, name)  VALUES ('abcd', 'abcd', 1234, 'abcd')' at line 1
org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:237)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72

我的代码段是:

 List<Device> devices = this.jdbcTemplate.query(
            "select * from xyz.device a,xyz.user_device b "
                    + "where b.user_id = ? and a.device_id = b.device_id and "
                    + "a.type = ?",
            new Object[]{userId,type},
            new RowMapper<Device>() {
 public Device mapRow(ResultSet rs, int rowNum) throws SQLException {
                    Device device = new Device();

                    device.setId(Long.valueOf(rs.getInt(1)));
                    device.setKey(rs.getString(2));
                device.setIPAddress(rs.getString(3));
                    device.setType(rs.getInt(4));
                    device.setName(rs.getString(5));
                        return device;
                }
            });
      System.out.println("Found for user..." + userId);
      return devices;
}

public void create(Device device) {
    this.jdbcTemplate.update("INSERT INTO xyz.device (key, ip_address, type, name) VALUES (?, ?, ?, ?)", 

                    new Object[]{device.getKey(), device.getIPAddress(), device.getType(), device.getName()});              
        }
        public void delete(Device device) {
            this.jdbcTemplate.update("DELETE FROM xyz.device WHERE device_id = ?", new Object[] {device.getId()});      
        }

        public void update(Device device) {
            this.jdbcTemplate.update(
                    "UPDATE xyz.device SET key = ?, ip_address = ?, type = ?, name =? WHERE device_id = ?", new Object[]{device.getId(),device.getKey(), device.getIPAddress(), device.getType(), device.getName()});

我的 Debug.java 代码是:

public String getNavBarData(){
      Device device = new Device();
      device.setKey("abcd");
      device.setIPAddress("abcd");
      device.setType(1234);
      device.setName("abcd");


        deviceDao.create(device);
        return "";

MySQL 表的列与我上面的代码中的列相同,每个字段都为 NOT NULL。我为不同的功能使用了相同的代码,它在那里工作。为什么我会收到这个错误?请。帮助。

4

1 回答 1

1

KEY是Mysql中的保留字。因此,您要么重命名列(从长远来看更好),要么在它周围使用反引号。

话虽如此,您的插入语句应该如下所示

INSERT INTO xyz.device (`key`, ip_address, type, name) VALUES (?, ?, ?, ?)
                        ^   ^

您的更新声明也是如此

UPDATE xyz.device SET `key` = ?, ip_address = ?, type = ?, name =? WHERE device_id = ?
                      ^   ^
于 2013-08-24T04:46:18.660 回答