簡體   English   中英

java.sql.SQLSyntaxErrorException-ORA-01722: 無效數字 - 准備好的語句

[英]java.sql.SQLSyntaxErrorException-ORA-01722: invalid number - Prepared statement

我正在通過刪除代碼中的 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 PreparedStatement語句 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM