IBM DB2、SQL和Java PreparedStatement。如何:选择ROWID所在的位置=

IBM DB2、SQL和Java PreparedStatement。如何:选择ROWID所在的位置=,java,sql,jdbc,db2,Java,Sql,Jdbc,Db2,上述操作不起作用,正在获取: 线程主java.lang.AbstractMethodError中出现异常: java/sql/PreparedStatement.setRowIdILjava/sql/RowId 我尝试使用字符串: String updateSQL = "UPDATE FILE_CLOB_VERSION SET WS_ACHIEVED = ? WHERE ROWID = ?"; PreparedStatement stmt = con.prepareStateme

上述操作不起作用,正在获取:

线程主java.lang.AbstractMethodError中出现异常:

java/sql/PreparedStatement.setRowIdILjava/sql/RowId

我尝试使用字符串:

    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 com.ibm.db2.jcc.b.SqlException中的异常:[ibm][db2][jcc][1083][10403]不允许的转换

我还尝试更改updateSQL:

    stmt.setString(2, "4fa78fb773723b13e90401255bdc0100000000001201");
并使用setString。。。不走运。如果在java环境之外不使用preparedstatement查询数据库,则查询如下所示:

String updateSQL = "... ROWID = ROWID(X?)";
我准备好的声明应该是什么样子

ROWID列的数据类型为ROWID:

列名称数据类型类型名称

ROWID 1111 ROWID你试过这个吗

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

这有用吗?也许你应该使用字符串updateSQL=。。。ROWID=ROWIDX'?';之前已经看到了,但是没有,没有帮助:没有,我相信我已经尝试过了,而且您通常不会在准备好的语句中引用字符串,SQLERRMC:09了解代码及其含义在哪个平台上运行代码以及默认编码是什么?如果它是一些深奥的东西或类似的东西,或者数据库希望字节采用非ASCII兼容编码,则可以尝试显式指定它,例如getBytesASCII或getBytesCp1047
stmt.setBytes(2, "4fa78fb773723b13e90401255bdc0100000000001201".getBytes());