由于撇号,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库。 参考文档。