java.sql.SQLSyntaxErrorException-ORA-01722:无效的数字-Prepared语句



我正在通过删除代码中的replaceAll((来修复代码中的一些SQL注入问题。我将用占位符替换查询中的命名参数,并在其中使用prepared语句。我收到以下问题,请给我建议。

查询:

<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:无效数字

有人能帮我吗?这里有什么问题?如何将命名参数转换为占位符?

我不确定你的问题的全部内容,但JavaPreparedStatement语句API不使用命名占位符,它只使用由?指示的位置占位符。从官方文档中,这里有一个示例代码:

String updateString = "update COFFEES " + "set SALES = ? where COF_NAME = ?";
PreparedStatement updateSales = con.prepareStatement(updateString);
updateSales.setInt(1, e.getValue().intValue());
updateSales.setString(2, e.getKey());
updateSales.executeUpdate();

最新更新