我正在尝试使用Hibernate选择一些数据 查询最终如下
"select mystuff from mytable where upper(mystuff)=upper('a''c')"
(a' c来自StringEscapeUtils.escapeSql()
转义的用户输入)
Hibernate给了我一个SQLGrammarException。我是否错过了那个单引号?
答案 0 :(得分:1)
我认为''
逃脱'
是好的。我想Hibernate +一些RDBMS可能会有一些错误,这些引用是逃避的。您应该尝试使用preparedStatement
或Query
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将能够处理它。
希望有所帮助:)