0

这是我的查询

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:expecting ''',found 'EOF'

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

4

2 回答 2

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();

如果你确定你的查询只会给出一条记录,那么不要使用 list() ,而是使用 Query 接口的 uniqueResult() 方法。

有关详细信息,请参阅此处的查询接口文档

于 2013-10-29T06:42:40.907 回答
1

您可以使用PreparedStatement而不是简单查询并让PreparedStatement处理撇号和其他特殊字符为您。请参阅Oracle 文档。

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

于 2013-10-29T06:41:18.867 回答