我在使用sql语句向数据库中添加数据的时候,报出以下错误,具体原因如下所示

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into sys_user_role values =(?,?)]; nested exception is java.sql.SQLSyntaxErrorException: 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 '=(null,7)' at line 1
	org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:234)

我对于‘=(null,7)’困惑了半天,搞不清楚是什么东西,控制台的报错处的表名我又看错了

导致我花费了很多时间在上面。我反复检查这条sql语句无果。

@Override
    public void saveUserRoleRel(Long id, Long[] roleIds) {
        // 一个用户可以对应多个角色,将角色进行循环遍历
        for (Long roleId : roleIds) {
            jdbcTemplate.update("insert into sys_user_role values =(?,?)",id,roleId);
        }

    }

后来意识到了问题,通过查找相关资料,我了解到 单引号部分引起的=(?,7),是我为在SQL语句作为占位符的?赋的值,一个值是null,就说明,没有正确赋值,问题出在这里。

 

 经过一番周折,锁定问题出在此处,调用方法处的地方,没有传进id值,导致sql语句出错。

@Override
    public void saveUserRoleRel(Long id, Long[] roleIds) {
        // 一个用户可以对应多个角色,将角色进行循环遍历
        for (Long roleId : roleIds) {
            jdbcTemplate.update("insert into sys_user_role values =(?,?)",id,roleId);
        }

    }

总结:1.遇到此类问题时,一定要看清楚具体的日志消息,在某些项目中,表的名字可能十分相近,从而导致我们无法快速定位到出错的sql语句上。

2.单引号部分引起的=(?,7),         

【 是为在SQL语句中作为占位符的?赋的值】,等号后面所显示,便是我们实际传递的值。

3.为快速找出sql语句的问题,在idea中使用调试模式,可以方变查看为?赋的具体值