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

来源:互联网 发布:网络品牌推广方案 编辑:程序博客网 时间:2024/06/05 02:47


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社区。
阅读全文
0 0
原创粉丝点击