Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
准备好的语句插入JDBCMySQL_Mysql_Sql_Jdbc_Prepared Statement - Fatal编程技术网

准备好的语句插入JDBCMySQL

准备好的语句插入JDBCMySQL,mysql,sql,jdbc,prepared-statement,Mysql,Sql,Jdbc,Prepared Statement,我在执行“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

我在执行“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()});
MySQL表的列与我上面代码中的列相同,每个字段都不为NULL。我在不同的功能中使用了相同的代码,它在那里工作。为什么我在这一个表中出现此错误?请提供帮助。

键是MySQL中的一个。因此,您可以重命名该列(从长远来看,这会更好)或者在其周围使用回勾

也就是说,插入语句应该如下所示

插入xyz.device(`key`,ip地址,类型,名称)值(?,,?)
^   ^
update语句也是如此

UPDATE xyz.device SET `key` = ?, ip_address = ?, type = ?, name =? WHERE device_id = ?
                      ^   ^
是Mysql中的一个键。因此,您可以重命名该列(从长远来看这会更好),或者在其周围使用反勾号

也就是说,插入语句应该如下所示

插入xyz.device(`key`,ip地址,类型,名称)值(?,,?)
^   ^
update语句也是如此

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

只是一个建议,尝试在标记为它的问题周围添加引号-它由Eclipse标记。只是一个建议,尝试在标记为它的问题周围添加引号-它由Eclipse标记。@user2480526这不会是相同的错误。你确定使用了反勾号字符而不是单引号吗?这是演示。取消对la的注释你可以得到你的错误。或者另一种解释是,你的代码中还有其他地方,你有“代码>键/代码>没有备份。谢谢。你是一个救生员。”@ USER 2480526。如果你觉得它是有用的,请考虑回答。完成。我没有赞扬你的答案的声誉。(尚未)。但再次感谢。@user2480526现在您可以:)@user2480526这不可能是相同的错误。您确定使用了反勾号字符而不是单引号吗?这是演示。取消最后一次插入的注释,然后单击
Build schema
,您将得到错误。或者另一种解释是,您的代码中有
键的其他位置如果你觉得它是有用的,请考虑回答。完成。我没有赞扬你的答案的声誉(但是)。但是再次感谢。@ USE2480526现在你可以: