java.lang.IllegalArgumentException: No positional parameters in query:


IllegalArgumentException


java.lang.IllegalArgumentException: No positional parameters in query:


在项目的开发过程中,因为都是在基于SSH的环境下进行的项目开发,所在很多人习惯于使用Hibernate的HQL进行项目的开发,以提高项目开发的效率,但是在某些情况下,HQL是不能满足于项目的需求的,所以我们又不得不编写原生的SQL,对于有些人在习惯了hibernate带来的便利了,所以突然需要编写原生SQL时,可能出现SQL参数设值错误的情况,当然我也不例外,关于这个问题,我想把它分享出来,希望能帮到你。




很明显告诉我们,SQL参数设置时,找不到占位符,导致的查询无法执行,以下是我的一个示例SQL ,所要描述的问题都是一样的:


SQLQuery query = super.getSession().createSQLQuery(" SELECT * FROM DEMOE D WHERE D.NAME LIKE '?%'  ");
query.setString(0, getSessionUser());

List list = query.list();


如上面这个问题,注意细节  - > LIKE '?%' ,当我们对其进行设值时,'?',在引号中,把他当成了 普通字符串,而不是占位符,所以使用Hibernate进行设值时,找不到占位符,故报 " No positional parameters in query " 的错误!只有一个解决办法,在Oracle中有一个使用一个 链接符号 ' || ' 将?和%拼接起来,就可以解决了,如SQL:

SELECT * FROM DEMOE D WHERE D.NAME LIKE ?||'%'

好了关于一个原生SQL参数设值的问题,就解决了,在项目开发的过程中一定要注意细节问题,往往一些很难找到的问题就是出现在细节上。


歇后语:“共同学习,共同进步”,也希望大家多多关注CSND的IT社区。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值