java - 如何在 java 中准备一个字符串,该字符串最终将传递到 SQL 中进行搜索

标签 java sql-server string

这就是我想做的

用户输入一个字符串。这被传递到一个 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/

相关文章:

c++ - std::string 及其自动调整内存大小

c - 不知道为什么我用 strtok/EOF 得到 "Bus error 10"

java - 在某些列表中编号,Java Streams foreach

java - 难以理解神经网络中的反向传播算法

java - 用Java反射如何实例化一个新对象,然后调用一个方法就可以了?

sql-server - 如何从 Azure SQL 迁移到 SQL Server?

java - 绘制的图像不会停留在屏幕上

sql-server - 有数百个的主表 vs 几个更小的表

SQL 从字符串中提取值

javascript - String 是否继承自 Javascript 中的 Object?