IBM DB2, SQL и Java PreparedStatement. Как: ВЫБРАТЬ ГДЕ ROWID = - PullRequest
0 голосов
/ 04 января 2012
    String updateSQL = "UPDATE FILE_CLOB_VERSION SET WS_ACHIEVED = ? WHERE ROWID = ?";
    PreparedStatement stmt = con.prepareStatement(updateSQL);   
    ...
    stmt.setString(1, "PUBLISHED");
    stmt.setRowId(2,new RowId() {

        @Override
        public byte[] getBytes() {
            return "4fa78fb773723b13e90401255bdc0100000000001201".getBytes();
        }
    });

Выше не работает, получая:

Исключение в потоке "main" java.lang.AbstractMethodError:

Java / SQL / PreparedStatement.setRowId (ILjava / SQL / RowId;)

Я пытался использовать строку:

    stmt.setString(2, "4fa78fb773723b13e90401255bdc0100000000001201");

Исключение в потоке "main" com.ibm.db2.jcc.b.SqlException: [ibm] [db2] [jcc] [1083] [10403] Недопустимое преобразование.

Я также пытался изменить updateSQL:

String updateSQL = "... ROWID = ROWID(X?)";

и использовать setString ... не повезло. Если вы запрашиваете базу данных без подготовленного заявления вне среды Java, запрос будет выглядеть следующим образом:

UPDATE FILE_CLOB_VERSION SET WS_ACHIEVED = 'PUBLISHED' WHERE ROWID = ROWID(X'4fa78fb773723b13e90401255bdc0100000000001201')

Как должно выглядеть мое подготовленное заявление?

Столбец ROWID имеет тип данных ROWID:

COLUMN_NAME DATA_TYPE TYPE_NAME

ROWID 1111 ROWID

1 Ответ

0 голосов
/ 04 января 2012

Вы пробовали это?

stmt.setBytes(2, "4fa78fb773723b13e90401255bdc0100000000001201".getBytes());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...