报错信息
Caused by: org.postgresql.util.PSQLException: ERROR: column “user_json” is of type json but expression is of type character varying
建议:You will need to rewrite or cast the expression.
解决方案
方法一:
在连接参数中加入:&stringtype=unspecified 用于把JSON类型当STRING类型存储
方法二:
或者使用PGobject对象来传输
PGobject pgobject = new PGobject();
pgobject.setType("json");
pgobject.setValue(jsonString);
注意
采用方法一,当执行SQL模糊查询时会出现以下错误:
SQL语句:
SELECT * FROM user_info WHERE real_name LIKE CONCAT('%', #{realName}, '%')
报错信息:
说明
对于mysql 的 like 而言,一般都要用 like concat() 组合,可以防止sql注入。
但是使用pgsql时添加了参数stringtype=unspecified,就会报无法确定参数类型的错。
解决方法
将SQL语句修改下:
SELECT * FROM user_info WHERE real_name LIKE '%${realName}%'
但是 ’%${XXX}%‘
的写法无法防止SQL注入
所以最佳写法:
SELECT * FROM user_info WHERE real_name LIKE '%' || #{realName} ||'%'