Mybatis中 变量为表明报“ORA-00903: 表名无效”以及“无效的关系运算符”

具体问题以及解决过程如下:

<select id="get" resultType="xxx.domain.ReadingDO">
  SELECT * FROM #{tableName} WHERE 
    TO_CHAR(采集时间,'yyyy-mm-dd hh24:mi:ss') = #{date};
</select>

这个sql很简单,数据库为oracle。

 

第一个问题:

首先,报了第一个错:"表名无效",一番折腾后,问题在于如下所示,我已经把问题着重标出:

  SELECT * FROM #{tableName} WHERE TO_CHAR(采集时间,'yyyy-mm-dd hh24:mi:ss') = #{date};

解决方案为:将 #{ } 换成 ${ }

抄一下别人的总结:

#{} :表示sql中的参数部分,实际上底层使用的是PreparedStatement

${}:表示字符串拼接,实际上底层采用的Statement对象

 

第二个问题:

第一个问题解决方之后,紧接着报了第二个错:"无效的关系运算符",真的是脑瓜疼啊,问题如下所示,我已经把问题着重标出:

  SELECT * FROM ${tableName} WHERE TO_CHAR(采集时间,'yyyy-mm-dd hh24:mi:ss') = #{date} ;

解决方案为:将 “;” 删除

总结:这个“;”真的让我很难受,所以你复制语句进数据库查询也是完全能跑通的,我觉得其实mybaits可以在这里加个过滤器,过滤掉sql语句末尾的";",毕竟sql写多了,习惯性的都喜欢写完一句sql就加个";"。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是一个有理想的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值