栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SQLSyntaxErrorException: You have an error in your SQL syntax

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQLSyntaxErrorException: You have an error in your SQL syntax

我在使用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中使用调试模式,可以方变查看为?赋的具体值

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/927175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号