由于撇号,Hibernate中的QueryException
这是我的查询
SQL_QUERY="SELECT review.comment FROM ReviewDO review WHERE title='"+titleName+"'";
通过使用标题我试图得到它的描述。
例如,如果tileName="Worth for money";
(没有撇号)查询将是:
SQL_QUERY="SELECT review.comment FROM ReviewDO review WHERE title='Worth for money';
我得到了输出。
但如果titleName="Can't beat the product";
(用撇号)
SQL_QUERY="SELECT review.comment FROM ReviewDO review WHERE title='Can't beat the product';
我得到org.hibernate.QueryException:期待”’,找到’EOF’
有什么方法可以避免这个问题吗?
使用占位符。 它还有助于防止SQL注入:
Session ses = HibernateUtil.getSessionFactory().openSession(); String query = "SELECT review.comment FROM ReviewDO review WHERE title=:title"; List reviewComments = ses.createQuery(query) .setParameter("title", "Can't beat the product") .list(); ses.close();
如果您确定您的查询只提供一条记录,那么使用Query接口的uniqueResult()方法而不是使用list()。
有关更多详细信息,请参阅此处的Query接口文档
您可以使用PreparedStatement
而不是简单查询,让PreparedStatement
为您处理撇号和其他特殊字符。 请参阅此 Oracle的文档。
第二种方法是使用StringEscapeUtils库。 参考文档。
- 如何配置maven hbm2hbmxml和hbm2java在mvn clean install中依次运行
- Hibernate / JPA注释中的多列连接
- 我可以在Discriminated Entity Hierarchy的子类上使用CompositeId吗?
- 在equals和hashcode方法中使用自动生成的hibenate实体对象的id
- hibernate oracle标识符太长ORA-00972
- Hibernate – 避免LazyInitializationException – 从代理和会话中分离对象
- 写后面的缓存Ehcache新function?
- Springunit testing用例不会回滚插入记录
- Hibernate – java.lang.OutOfMemoryError:Java堆空间