我有一个包含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。
由于平台差异,这感觉很像编码问题。但谁知道呢。有什么建议吗?
答案 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" );
我没有上面回答中提到的任何驱动程序问题
希望这有助于遇到类似问题的人