title: Prepared Statement INSERT JDBC MySQL
body: <p>I am getting an error on doing ' mvn tomcat:run " . The error I am getting is:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>My code segment is:</p>
  
  <pre><code> List&lt;Device&gt; 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&lt;Device&gt;() {
   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()});
  </code></pre>
  
  <p>And my Debug.java code is:</p>
  
  <pre><code>public String getNavBarData(){
        Device device = new Device();
        device.setKey("abcd");
        device.setIPAddress("abcd");
        device.setType(1234);
        device.setName("abcd");
  
  
          deviceDao.create(device);
          return "";
  </code></pre>
  
  <p>The MySQL table has the same columns as in my code above with NOT NULL for each field. I have used the same code for a different functionality and it works there. Why am I getting this error for this one? Pls. Help.</p>