2012-02-16 153 views
1

我正在研究通過JDBC更新數據庫(IBM DB2 v 9.7)中的數據的應用程序。這裏的表模式:準備好的語句失敗,出現DB2 SQL錯誤:SQLCODE:-401,SQLSTATE:42818

列名數據類型長度

1)INDEX BIGINT -

2)USER_NAME VARCHAR 30

3)SRC VARCHAR 30

4)STATUS 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) 
       {.... 

但它失敗了,任何人都可以幫助我嗎?

感謝和問候

+0

請提供您正在執行的語句(即,cmd1),因爲這是解決這個問題的關鍵。 – 2012-02-16 14:19:14

+0

對不起,我很粗心:( – nikel 2012-02-16 14:21:19

+0

在字符串cmd1中,我已經提到它作爲RT_COUNT和USER_NAME,所以這不是一個錯誤.. – nikel 2012-02-16 14:22:42

回答

2

根據IBM的網站中,42818的SQLSTATE是42818「的運算符或函數的操作數不兼容或者不具有可比性。」這意味着您將錯誤的數據類型設置爲準備好的語句。

您可能需要將RT_COUNT取出並執行setInt或setLong或其他操作才能使其工作。

此外,我假設來源和內容是字符串?如果不是,那也可能對此有所貢獻。

編輯 要做到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」。它需要是Long來映射到DB2中的bigint。請參閱what data types in Java map to what data types in DB2

+1

就像fyi一樣,這裏是該網站的鏈接與消息:http:/ /publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.messages.doc/doc/rdb2stt.html – 2012-02-16 14:25:15

+0

是的,他們是Strings.Could你請更新我的RT_COUNT事情? – nikel 2012-02-16 14:26:27

+0

並感謝您的Link.But沒有幫助,已檢查它: - | – nikel 2012-02-16 14:28:30

2

除了鑄造在Java中,如果你知道的參數應該是什麼類型的,你也可以扮演他們在SQL中,像這樣的@克里斯Aldrich公司的回答是:

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