这就是我想做的
用户输入一个字符串。这被传递到一个 java 程序中,然后该程序对 sql server 运行查询并尝试查找该字符串出现的记录。最终针对 SQL Server 运行的查询是这样的
Select * from users where name like '*userPassedInText*'
我遇到的问题是,如果该字符串包含某些字符,例如 ' 查询就会中断。我知道执行此操作的理想方法是使用
PreparedStatement statement= con.prepareStatement (myStatement );
但由于某些原因我必须传入一个字符串。话虽如此,java 中是否有任何实用程序可以准备要发送到 SQL Server 的字符串?
最佳答案
要回答您眼前的问题:您只需将所有“单引号”字符替换为两个单引号字符:
String original ="it's a problem when you have a single quote in SQL params"; // String contains a single quote
String escaped = original.replaceAll("'","''"); // replace all single quotes with 2 single quotes
但是我恳求你不要简单地接受用户传入的任何内容(特别是考虑到你的变量的名称为 userPassedInText!!)。我强烈建议大家阅读以下内容:
https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java
...因为如果您只接受用户输入的任何内容,那么他们可以输入“一些带单引号的文本' OR 1==1”。 SQL 将返回数据库表中的所有记录。您肯定想使用准备好的语句。而且,作为奖励,您不必手动将单引号替换为两个单引号。
关于java - 如何在 java 中准备一个字符串,该字符串最终将传递到 SQL 中进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31839976/