gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:15:44 26 4
gpt4 key购买 nike

这就是我想做的

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com