由于撇号,Hibernate中的QueryException

时间:2013-10-29 06:36:06

标签: java mysql hibernate apostrophe

这是我的查询

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'

有没有办法避免这个问题?

2 个答案:

答案 0 :(得分:4)

使用占位符。它还有助于防止SQL注入:

 Session ses = HibernateUtil.getSessionFactory().openSession();
  String query = "SELECT review.comment FROM ReviewDO review WHERE title=:title";
  List<ReviewComment> reviewComments = ses.createQuery(query)
  .setParameter("title", "Can't beat the product")
  .list();
  ses.close();

如果您确定您的查询只提供一条记录,那么使用Query接口的uniqueResult()方法而不是使用list()。

有关详细信息,请参阅查询界面here

的文档

答案 1 :(得分:1)

您可以使用PreparedStatement代替简单查询,让PreparedStatement为您处理撇号和其他特殊字符。请参阅this Oracle的文档。

第二种方法是使用StringEscapeUtils库。请参阅文档。