2013-08-23 4 views
1

Я получаю сообщение об ошибке делать "МВН кот:. Выполнить" Ошибка я получаю:Подготовленные Заявление INSERT JDBC MySQL

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 для каждого поля я использовал сэм. e для другой функциональности, и он работает там. Почему я получаю эту ошибку для этого? Pls. Помогите.

+0

просто предложение, попробуйте добавить кавычки вокруг вопросительных знаков – cameronjonesweb

+0

Пробовали - он помечен Eclipse. – user2480526

ответ

1

KEY является reserved word в Mysql. Поэтому вы либо переименовываете столбец (что лучше в долгосрочной перспективе), либо используйте обратные тики вокруг него.

Это сказанное вставить заявление должно выглядеть следующим образом

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

То же самое к выписке обновления

UPDATE xyz.device SET `key` = ?, ip_address = ?, type = ?, name =? WHERE device_id = ? 
        ^^
+0

Thx. Пробовал это - та же ошибка. – user2480526

+0

@ user2480526 Не может быть ** той же ошибки **. Вы уверены, что использовали обратный тик, а не одинарные кавычки? Вот демоверсия [sqlfiddle] (http://sqlfiddle.com/#!2/a7071). Раскомментируйте последнюю вставку и нажмите «Сборка схемы», вы получите свою ошибку. Или другое объяснение состоит в том, что у вас есть другие места в вашем коде, где у вас есть «ключ» без обратных тиков. – peterm

+0

Спасибо. Вы спасаете жизнь :) – user2480526

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