我有一个现有代码,其中应用程序根据许多条件生成不同的 sql,并通过休眠会话 createSQLQuery() 执行它们。在这里,参数与驻留在 java 类中的 sql 字符串连接,作为正常的字符串替换。这里的问题是现在我需要防止 sql 注入。因此,为此我必须使用 getNamedQuery() 并绑定参数,以便 hibernate 处理特殊字符。但问题是将字符串 sql's 移动到 xml 文件是一种开销,因为有条件地生成 sql's。所以我决定手动进行特殊字符验证并将其附加到字符串查询并按现在的方式执行。然后我检查了我发现的 PrepareStatement 的来源,它只是抛出了一个异常
byte[] arrayOfByte1 = new byte[0];
try
{
arrayOfByte1 = CharsToBytes(this.OdbcApi.charSet, arrayOfChar);
}
catch (UnsupportedEncodingException localUnsupportedEncodingException) {
}
在将参数与字符串查询连接以消除 sql 注入之前,如何在 java 类中对参数进行与上述相同的编码?或者有什么办法我仍然可以保留字符串sql,因为它是一个附加参数并使用hibernate来执行查询?