DB2 错误 SQLCODE=-103,SQLSTATE=42604

Posted

技术标签:

【中文标题】DB2 错误 SQLCODE=-103,SQLSTATE=42604【英文标题】:DB2 Error SQLCODE=-103, SQLSTATE=42604 【发布时间】:2013-04-06 14:09:42 【问题描述】:

我正在尝试更新一个表,但它不工作并给出这个 sql 错误。

//Updating Buy Table
Integer stkbid = Integer.parseInt(request.getParameter("stockBid"));
System.out.println("stock buy id : " + stkbid);
//get buy details
PreparedStatement stmtbuy = conn.prepareStatement(
        "SELECT \"StockSymbol\", \"Unit\", \"Price\", \"ClearingFee\", \"StampDuty\", \"BrokerFee\""  + 
        "FROM SPM.\"StockBuy\" WHERE \"StockBuyId\" = '"+ stkbid + "'");

System.out.println("Got stock buy details");

ResultSet rs=stmtbuy.executeQuery();
rs.next();
//String stkcode = rs.getString("StockSymbol");
Integer stkunit =  Integer.parseInt(rs.getString("Unit"));
stkunit -= stock.getStockUnit();
Double stkprice = Double.parseDouble(rs.getString("Price"));
Double stkclear = Double.parseDouble(rs.getString("ClearingFee"));
Double stksd = Double.parseDouble(rs.getString("StampDuty"));
Double stkbfee = Double.parseDouble(rs.getString("BrokerFee"));
Double stkval = stkunit * stkprice;
Double stknv = stkval + stkval * (stkclear + stksd + stkbfee);

System.out.println(stknv);

PreparedStatement stmtbuy1 = conn.prepareStatement(
        "UPDATE SPM.\"StockBuy\" SET \"Unit\" = " + stkunit + ", \"Value\" = " + stkval + ", \"NetValue\" = " + stknv + 
        "WHERE \"StockBuyId\" = "+ stkbid);

【问题讨论】:

第一个选择语句正在工作,我也尝试了将 stkbid 括在单引号内的相同格式,但在更新语句中它不起作用 您不使用参数化查询是否有某些原因? 是的,我可以使用它,但这应该也能用吗? -103 表示“常量是无效的数字常量”:pic.dhe.ibm.com/infocenter/dzichelp/v2r2/… 像你一样构造完整的 sql 查询通常被认为是不好的形式。在 PreparedStatements 中使用占位符,如图所示 here 【参考方案1】:

您在WHERE 子句之前缺少一个空格,这弄乱了您的stknv

" WHERE \"StockBuyId\" = "+ stkbid);

我认为任何发帖人都有义务提醒您应该使用参数化查询。所以我也会这样做。

"请使用参数化查询!"

【讨论】:

感谢您指出这个错误,是的,使用参数化查询解决了我的问题..【参考方案2】:

有效的查询末尾有一个引号:

" WHERE \"StockBuyId\" = '"+ stkbid + "'");

失败的不会

    "WHERE \"StockBuyId\" = "+ stkbid);

这可能与它有关。

【讨论】:

以上是关于DB2 错误 SQLCODE=-103,SQLSTATE=42604的主要内容,如果未能解决你的问题,请参考以下文章

运行生成插入语句的 DB2 过程时的 SQLCODE 433 SQLSTATE 42806

db2 错误 sqlcode:-1224

DB2 SQL 错误:SQLCODE=-204,SQLSTATE=42704

原因:com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL 错误:SQLCODE=-440,SQLSTATE=42884

DB2 Funktion不起作用,错误代码SQLCODE = -104

SQL 查询的准备语句,错误 DB2 SQL 错误:SQLCODE=-206,SQLSTATE=42703