【发布时间】:2021-12-23 20:10:16
【问题描述】:
我正在通过删除代码中的 replaceAll() 来修复代码中的一些 SQL 注入问题。我用占位符替换查询中的命名参数,并在其中使用准备好的语句。我遇到以下问题,请指教。
查询:
<entry key= "GET DATA">
select ATYPE, ANAME, AGRID, AVALUE
from ALG_RSV.TERMS
--where AGRID in (':AGRS') // changed this line
where AGRID in (?) // to this
order by 2,1
代码:
{...
List<String> agreeIDs = getAgree
String agrID = String.join(",",agreeIDs);
// String sqlQuery = CSRConsole.getProperty(GET DATA).replaceAll(":AGRS", agrID);//
commented out replaceALL
String sqlQuery = CSRConsole.getProperty(GET DATA); //Changed like this
prepStat= Conn.prepareStatement(sqlQuery);
prepStat.setString(1, agrID);// changed like this, getting issue in this line
rs = prepStat.executeQuery();
.....}
错误:
java.sql.SQLSyntaxErrorException-ORA-01722:无效数字
有人可以帮我解决这个问题吗?这里有什么问题?如何将命名参数转换为占位符?
【问题讨论】:
标签: java sql oracle prepared-statement placeholder