IllegalArgumentException
java.lang.IllegalArgumentException: No positional parameters in query:
在项目的开发过程中,因为都是在基于SSH的环境下进行的项目开发,所在很多人习惯于使用Hibernate的HQL进行项目的开发,以提高项目开发的效率,但是在某些情况下,HQL是不能满足于项目的需求的,所以我们又不得不编写原生的SQL,对于有些人在习惯了hibernate带来的便利了,所以突然需要编写原生SQL时,可能出现SQL参数设值错误的情况,当然我也不例外,关于这个问题,我想把它分享出来,希望能帮到你。
很明显告诉我们,SQL参数设置时,找不到占位符,导致的查询无法执行,以下是我的一个示例SQL ,所要描述的问题都是一样的:
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参数设值的问题,就解决了,在项目开发的过程中一定要注意细节问题,往往一些很难找到的问题就是出现在细节上。