PostgreSQL 执行更程中报错(### Error updating database. Corg.springframework.jdbc.BadSqlGrammarException: )

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有问题,检查columnproperty类型是否对应;columnproperty的拼写是否正确。(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>

注:由于userNameString类型,但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数据库。

你可能感兴趣的:(开发语言,java)