如何在插入XML列时解决“非法转换”异常?

时间:2010-09-24 15:31:58

标签: java hibernate db2 websphere

我有一个包含XML类型列的表。当我在Windows上的WebSphere中运行的servlet中将记录插入此表时,插入成功。但是,当我在AIX上运行完全相同的WebSphere代码时,我得到以下异常:

com.ibm.db2.jcc.c.SqlException: Illegal Conversion: Can not convert from "java.lang.String" to "java.sql.Blob"
        at com.ibm.db2.jcc.c.r.a(r.java:695)
        at com.ibm.db2.jcc.c.uf.b(uf.java:927)
        at com.ibm.db2.jcc.c.uf.setString(uf.java:910)
        at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper.psSetString(InternalGenericDataStoreHelper.java:554)
        at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.setString(WSJdbcPreparedStatement.java:1662)
        at org.hibernate.type.StringType.set(StringType.java:49)
        at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)
        at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:131)
        at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2015)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2261)
        ... 33 more

我正在针对DB2版本9,z / OS数据库运行WebSphere 6.1。

由于平台差异,这感觉很像编码问题。但谁知道呢。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

这证明是JDBC驱动程序配置的“问题”。

在同一JVM中运行的另一个应用程序配置为使用v8 JDBC驱动程序。我的配置是使用v9 JDBC驱动程序。但是由于类加载的工作方式,类路径中的第一个加载了两个(这恰好是v8驱动程序,它对我的​​应用程序不起作用。)

修复是将两个应用程序切换为使用v9驱动程序(这很好,因为它应该完全向后兼容。)

答案 1 :(得分:0)

只是猜测,因为我不使用DB2,但BLOB列可能要求输入是字节数组,而不是字符串。

答案 2 :(得分:0)

对我来说,我将日期传递给字符串列,如下所示

setDate( 5, new java.sql.Date( this.prevDate.getTime() ) );

当我将其更改为:

setString( 5, "20150404" );

我没有上面回答中提到的任何驱动程序问题

希望这有助于遇到类似问题的人