簡體   English   中英

准備好的語句失敗,並出現DB2 SQL錯誤:SQLCODE:-401,SQLSTATE:42818

[英]Prepared Statement failing with DB2 SQL error: SQLCODE: -401, SQLSTATE: 42818

我正在開發一個通過JDBC更新數據庫(IBM DB2 v 9.7)中數據的應用程序。 這是表模式:

列名數據類型長度

1)INDEX BIGINT-

2)USER_NAME VARCHAR 30

3)SRC VARCHAR 30

4)狀態VARCHAR 150

5)RT_COUNT BIGINT-

我的代碼是:

                                      String cmd1="Update ANALYTICS  SET RT_COUNT = 1 WHERE USER_NAME = ? AND STATUS = ?";
                                     PreparedStatement process=connection.prepareStatement(cmd1);

                 process.setString(1, Source);
                 process.setString(2, Content);


                 if(process.executeUpdate()==0)
                 {....

但是失敗了,有人可以幫我嗎?

謝謝並恭祝安康

根據IBM的站點,SQLSTATE 42818是42818“運算符或函數的操作數不兼容或不具有可比性。”。 這意味着您為准備好的語句設置了錯誤的數據類型。

您可能需要帶出RT_COUNT並執行setInt或setLong或其他使它起作用的操作。

另外,我假設Source和Content是字符串? 如果不是,那也可能對此有所貢獻。

編輯要執行我正在談論的RT_COUNT事情,必須修改查詢以執行以下操作:

String cmd1="Update ANALYTICS SET RT_COUNT = ? WHERE USER_NAME = ? AND STATUS = ?";
PreparedStatement process = connection.prepareStatement(cmd1);

process.setLong(1, new Long(1));
process.setString(2, source);
process.setString(3, content);

if(process.executeUpdate()==0)
{....

那實際上可能是您的問題,因為我不確定驅動程序如何解釋“ 1”。 要在DB2中映射到bigint,必須為Long。 查看Java中哪些數據類型映射到DB2中哪些數據類型

除了@Chris Aldrich用Java進行轉換的答案之外,如果您知道參數應該是什么類型,也可以用SQL進行轉換,如下所示:

UPDATE ANALYTICS
   SET RT_COUNT  = CAST(? AS BIGINT)
 WHERE USER_NAME = CAST(? AS VARCHAR(30))
   AND STATUS    = CAST(? AS VARCHAR(150))

暫無
暫無

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

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