Hibernate抱怨双单引号

时间:2014-04-25 17:09:57

标签: sql hibernate escaping

我正在尝试使用Hibernate选择一些数据 查询最终如下

"select mystuff from mytable where upper(mystuff)=upper('a''c')"

(a' c来自StringEscapeUtils.escapeSql()转义的用户输入)

Hibernate给了我一个SQLGrammarException。我是否错过了那个单引号?

1 个答案:

答案 0 :(得分:1)

我认为''逃脱'是好的。我想Hibernate +一些RDBMS可能会有一些错误,这些引用是逃避的。您应该尝试使用preparedStatementQuery interface of Hibernate。使用以下方法为您注入数据:

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

所以hibernate将能够处理它。

希望有所帮助:)