IBM DB2,SQL和Java PreparedStatement。如何:SELECT WHERE ROWID =

时间:2012-01-04 09:49:00

标签: java sql jdbc db2

    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的)

我尝试使用String:

    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 :(得分:0)

你试过这个吗?

stmt.setBytes(2, "4fa78fb773723b13e90401255bdc0100000000001201".getBytes());