【发布时间】:2020-01-14 07:51:17
【问题描述】:
我正在开发已经存在 sql 查询的 java 代码,但它会导致 sql 注入,我正在使用 setString 方法来避免 sql 注入。但是 setstring 为参数值添加了单引号,所以我的查询失败了。如何删除 setString 方法的单引号。
我尝试使用 replaceAll 方法,但它不适用于预先声明的语句。
String X="where IP ?";
String Y=" group by user";
String Z="order by descend";
query="select appname,user,IP from xyz "+X+" "+Y+Z; --> this is existing query.
我将查询更改如下
query="select appname,user,IP from xyz ? ? ?";
Object=connectionObj.prepareStatement(query);
Object.setString(1,X);
Object.setString(2,Y);
Object.setString(3,Z);
但是这里的 setString 方法是为值添加单个 quoes,所以我的查询由于语法错误而失败。我尝试了 replceAll("'"," ") 方法,但它只适用于字符串,不适用于准备好的语句。我遇到语法错误。请帮助我在 JAVA 中解决这个问题。
【问题讨论】:
-
这可能只是一个例子,但不要命名变量
Object。令人困惑。 -
from xyz ? ? ?应该是什么意思?这可能不是有效的 SQL 语法。 -
只能参数化值,不能查询片段。
-
@Tim - 看起来他们正试图提供 SQL 命令文本的片段作为参数值,例如,
group by user -
@Gord 我认为你是对的。有解决方法,但仍然很难给出明确的答案。