Sql Hibernate抱怨双单报价

Sql Hibernate抱怨双单报价,sql,hibernate,escaping,Sql,Hibernate,Escaping,我正在尝试使用Hibernate选择一些数据 查询结果如下所示 "select mystuff from mytable where upper(mystuff)=upper('a''c')" (a'c来自用户输入,由StringEscapeUtils.escapeSql())转义 Hibernate给了我一个SQLGrammarException。我把那句话漏掉了吗?我认为'漏掉'很好。我想Hibernate+某些RDBMS可能会在转义这些引号时出错。您应该尝试使用preparedStat

我正在尝试使用Hibernate选择一些数据
查询结果如下所示

"select mystuff from mytable where upper(mystuff)=upper('a''c')"
(a'c来自用户输入,由
StringEscapeUtils.escapeSql()
)转义

Hibernate给了我一个SQLGrammarException。我把那句话漏掉了吗?

我认为
'
漏掉
'
很好。我想Hibernate+某些RDBMS可能会在转义这些引号时出错。您应该尝试使用
preparedStatement
Query
。要使用如下方法向您注入数据:

String selectSQL = "select mystuff from mytable where upper(mystuff)=upper(?)";
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
preparedStatement.setString(1, "a'c");
ResultSet rs = preparedStatement.executeQuery(selectSQL);
while (rs.next()) {
    String mystuff = rs.getString("mystuff");
}
Query query = session.createQuery("from mytable where upper(mystuff)=upper(:mystuff)");
query.setString("mystuff", "a'c");
List<?> list = query.list();
或者像这样:

String selectSQL = "select mystuff from mytable where upper(mystuff)=upper(?)";
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
preparedStatement.setString(1, "a'c");
ResultSet rs = preparedStatement.executeQuery(selectSQL);
while (rs.next()) {
    String mystuff = rs.getString("mystuff");
}
Query query = session.createQuery("from mytable where upper(mystuff)=upper(:mystuff)");
query.setString("mystuff", "a'c");
List<?> list = query.list();
Query Query=session.createQuery(“来自mytable,其中upper(mystuff)=upper(:mystuff)”;
query.setString(“mystuff”、“a'c”);
List=query.List();
所以hibernate将能够处理它

希望有帮助:)