PostgreSQL在执行更新或插入操作时出现以下报错:
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near "xxxx1"
位置:263
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: update xx.xxxx SET xx = ?, xxx = ?, xxx = ?, xxxx = ?, xxxx1 = ? xxxx = ?
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near "xxxx1"
位置:263
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: syntax error at or near "xxxx1"
一般出现这种错误提示说明程序写的有问题,通常是SQL
语句不对,可能出现的问题主要有以下几种类型:
1.实体类属性和数据库表字段不对应,主要有以下几种类型错误:
Mapper.xml
中配置的resultMap
有问题,检查column
和property
类型是否对应;column
和property
的拼写是否正确。(column
对应数据库表中的字段,property
对应实体类属性):
<resultMap id="enterpriseMap" type="com.fjz.screendata.entity.Enterprise">
<result column="id" property="id"/>
<result column="create_time" property="createTime"/>
<result column="create_user" property="createUser"/>
<result column="update_time" property="updateTime"/>
<result column="update_user" property="updateUser"/>
<result column="create_dept" property="createDept"/>
<result column="status" property="status"/>
<result column="is_deleted" property="isDeleted"/>
<result column="name" property="name"/>
</resultMap>
2.数据表字段和实体类属性的数据类型不一致,或者是在程序或SQL语句中错误的判断逻辑导致字段或属性的数据类型出现问题。
实体类:
private String userName;
Mapper.xml
:
<select id='selectInfo'>
select * from schema.table
<where>
sattus != x
<if test=" userName != null and userName != 0">
and user_name = #{userName}
if>
where>
select>
注:由于userName
为String
类型,但select
标签中由于使用了 userName != 0
的判断,导致程序把userName
当做数字来处理,但userName
是不能进行 != 0
的操作的。
3.Mapper.xml中SQL语句from后面的表名不对,检查表名拼写有无错误,以及表名是否和实体类对应的表名一致。
SQL
语句中表名或访问的字段需要在数据库中存在,non_existent_table
表在数据库中不存在,会导致错误,表中的字段如果不存在同理。
<select id='selectInfo'>
select * from schema.non_existent_table
<where>
sattus != x
<if test=" userName != null and userName != 0">
and user_name = #{userName}
if>
where>
select>
4.Mapper.xml中SQL语句语法有问题,可能包括:
(1) SQL
语句中各子句的顺序写错了,SQL
语句执行顺序:from、where、group by、having、select、distinct、order by、limit
语句位置及功能详解
(2) SQL
语句中的标点符号使用错误,如:case when
标签之间不能出现逗号,但写了逗号导致错误。注:这种错误排查起来很耗费时间,平时一定要注意SQL
书写规范。
5.检查数据库地址是否正确,数据库中是否有对应的表,Reconnect数据库。