2012-02-16 2 views
1

Я работаю над приложением, которое обновляет данные в базе данных (IBM DB2 v 9.7) через JDBC. Вот Схема таблицы:Подготовлено заявление с ошибкой DB2 SQL: SQLCODE: -401, SQLSTATE: 42818

Столбец Тип данных Длина

1) ИНДЕКС BIGINT -

2) USER_NAME УАКСНАК 30

3) SRC УАКСНАК 30

4) СТАТУС УАКСНАК 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), поскольку это ключ к решению этого. –

+0

Извините, так не заботясь обо мне :( – nikel

+0

В строке cmd1 я упомянул его как RT_COUNT и USER_NAME, так что это не ошибка .. – nikel

ответ

2

Согласно сайту компании IBM, то SQLSTATE из 42818 является 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». Он должен быть длинным для сопоставления с bigint в DB2. См. 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 –

+0

да, это строки. Не могли бы вы обновить меня в RT_COUNT? – nikel

+0

И спасибо за Link.But не помогло, проверено уже: - | – nikel

2

В дополнение к ответу @ Крис Олдрича литья в Java, если вы знаете, какие типы должны быть параметры, вы можете также бросить их в SQL, например, так:

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