Java 如何转义SQL查询中使用的特殊字符?

Java 如何转义SQL查询中使用的特殊字符?,java,sql,escaping,Java,Sql,Escaping,是否有Java库用于从将要插入SQL查询的字符串中转义特殊字符 我一直在写代码来逃避各种各样的事情,但我总是发现一些新问题让我困惑。因此,一个能够处理所有或大部分可能性的库将非常方便 编辑:我正在使用MySQL(如果这有什么不同的话)。更多的研究表明: 这建议使用apache.commons.lang.StringEscapeUtils,我会尝试一下。。。jdbc。将字符串作为参数传递,不要将它们附加到查询字符串中我知道这是一个很长时间的线程,但是使用commonslang库有一个名为esca

是否有Java库用于从将要插入SQL查询的字符串中转义特殊字符

我一直在写代码来逃避各种各样的事情,但我总是发现一些新问题让我困惑。因此,一个能够处理所有或大部分可能性的库将非常方便


编辑:我正在使用MySQL(如果这有什么不同的话)。

更多的研究表明:


这建议使用apache.commons.lang.StringEscapeUtils,我会尝试一下。。。jdbc。将字符串作为参数传递,不要将它们附加到查询字符串中

我知道这是一个很长时间的线程,但是使用commonslang库有一个名为
escapeSql(string)
的方法。同时使用prepared语句自动转义有问题的SQL字符。

NO.STOP。使用参数。真正地唯一需要进行转义的情况是在动态SQL构建的非常有限的情况下——即使如此,转义通常也只是结构(例如列/表)元素,而不是数据本身。对不起,大喊大叫。试图消除为SQL:-)使用字符串构建(从而转义)的心态是危险的。这是不安全的。这并不总是有效的。问题是,语言环境对于“安全地”转义MySQL中的字符串很重要。这就是为什么PHP在已经有一个
mysql\u-real\u-escape\u字符串时引入了
mysql\u-escape\u-string
。前者试图通过考虑区域设置来“修复”该方法(但仍然不总是有效)。我不会反对投票,因为这是你自己的答案——虽然它应该是原始帖子的补充——但这不是一个好方法。有关“危险”,请参阅:并注意:“mysql_escape_字符串忽略了字符集,这可能会给老练的黑客留下一些漏洞。如果某个救生衣在某些情况下会失败,考虑在商店里选择不同的救生衣。这可能很重要。实际上,
StringEscapeUtils
中的方法甚至不如
mysql\u escape\u string
那么有效。例如,如果数据包含换行符,它将立即失败。还有其他需要转义的“基本”字符丢失了。+1但是。。。这真的应该扩展到至少包括一个参考/示例..可能是一个noob问题,但我没有看到一个替代executeUpdate或executeQuery的方法,它将参数作为输入。它们在哪里?@narengi:它需要Connection返回的PreparedStatement.prepareStatement,您可以通过setInt、setString等传递参数。我建议使用spring jdbc附带的NamedParameterJDBCTemplate(不需要使用spring框架)。