由于撇号导致Hibernate中出现QueryException

cl25kdpy  于 2022-11-14  发布在  其他
关注(0)|答案(3)|浏览(146)

这是我的问题

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’
有什么办法可以避免这个问题吗?

7uhlpewt

7uhlpewt1#

使用占位符。它还有助于防止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接口的Unique eResult()方法,而不是使用list()。
更多详情请参见查询接口here文档

cgyqldqp

cgyqldqp2#

您可以使用PreparedStatement而不是简单的查询,让PreparedStatement为您处理撇号和其他特殊字符。请参阅this Oracle文档。
第二种方法是使用StringEscapeUtils库。请参阅文档。

x33g5p2x

x33g5p2x3#

SQL_QUERY="SELECT review.comment FROM ReviewDO review WHERE title='Can't beat the product';
    
You can simple do it by refer below code. 
just add SQL_QUERY.replace("'", "''"); As per SQL query side if any string contain ( ' ) in string then while running just add ''.
    
Ex: "SELECT review.comment FROM ReviewDO review WHERE title='Can''t beat the product';

相关问题