【Postgres SQL】报错:操作符不存在: character varying = integer(但是我的数据类型都是Integer)

问题描述:

我使用mybatis操作pgsql数据库,查询语句如下:

<select id="selectMovieListByActorId" parameterType="java.lang.Integer" resultType="team.first.movie_api.domain.Movie">
      select * from movie_db.movie where id in (
          select movie_id from movie_with_actor where actor_id = ${id,jdbcType=INTEGER})
</select>

我的mapper接口方法是

List<Movie> selectMovieListByActorId(Integer id);

数据库中表的字段都为int4,没有varchar类型


执行报错:

### Error querying database.  Cause: org.postgresql.util.PSQLException: 错误: 操作符不存在: character varying = integer
  建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
  位置:107
### The error may exist in file [E:\实用数据库开发\project\movie-api-boot\target\classes\mapper\ActorMapper.xml]
### The error may involve team.first.movie_api.mapper.ActorMapper.selectMovieListByActorId-Inline
### The error occurred while setting parameters
### SQL: select * from movie_db.movie where id in (select movie_id from movie_with_actor where actor_id = 1031862)
### Cause: org.postgresql.util.PSQLException: 错误: 操作符不存在: character varying = integer
  建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.
  位置:107

将传参部分${} 换为 #{}还是报同样的错


数据库结构如下:

在这里插入图片描述


问题分析:

  1. 首先我的表不存在varchar类型,方法的传参也都是Integer,所以问题应该不是出在vharchar = integer
  2. 仔细检查sql语句发现内嵌查询没有给表名前加模式名movie_db
  3. 将原本语句更改如下,问题解决
    <select id="selectMovieListByActorId" parameterType="java.lang.Integer" resultType="team.first.movie_api.domain.Movie">
          select * from movie_db.movie where id in (
              select movie_id from movie_db.movie_with_actor where actor_id = ${id,jdbcType=INTEGER})
    </select>
    
  4. 解决办法2:将数据库全部放在public下,这样就可以免去在表明前添加模式名的麻烦,而且不易出错

总结:数据库的查询语句应该指明具体的表的位置(如果有多个模式,前面加上模式名),不指明模式的话就会默认去public模式下查找,从而报错。


总总结:这就是个很基本的错误,居然搞了好久才发现问题,我真傻,真的 =_=!

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别来BUG求求了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值