PostgreSQL JDBC执行简单查询报错:bigint与character varying类型不匹配
解决PostgreSQL类型不匹配错误:bigint = character varying
问题场景
执行以下SQL查询时触发错误:
/* crm_person */ select /*query crm_person*/ crm_pers.* from crm_person crm_pers where 1=1 and crm_pers.id = ?
错误信息:
org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint = character varying
提示:没有匹配给定名称和参数类型的运算符。您可能需要添加显式类型转换。
位置:133
问题原因
crm_person表的id字段类型为bigint,但传入查询的参数是character varying(字符串)类型,PostgreSQL不支持这两种类型的隐式比较,因此抛出类型不匹配错误。
解决方案
显式转换参数类型
在SQL中把字符串参数转为bigint,修改WHERE条件:and crm_pers.id = ?::bigint或使用CAST函数写法:
and crm_pers.id = CAST(? AS bigint)修正参数映射类型
检查参数映射配置,确保传入的参数是数值类型(如Java中的Long/Integer,而非String),从源头匹配字段的bigint类型,无需额外转换。修改表字段类型(谨慎操作)
若业务场景允许,可将crm_person.id的类型改为character varying,但此操作会影响依赖该字段的其他业务逻辑,需全面评估后执行。
内容的提问来源于stack exchange,提问作者GintsGints
相关产品推荐
相关产品推荐

