代码之家  ›  专栏  ›  技术社区  ›  Jared

如何解决插入到XML列时出现的“非法转换”异常?

  •  4
  • Jared  · 技术社区  · 14 年前

    我有一个具有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
    

    我正在针对DB2Version9,z/OS数据库运行WebSphere6.1。

    由于平台的不同,这就像是一个编码问题。但谁知道呢。有什么建议吗?

    3 回复  |  直到 8 年前
        1
  •  1
  •   Jared    14 年前

    这是JDBC驱动程序配置的一个“问题”。

    在同一个JVM中运行的另一个应用程序被配置为使用V8JDBC驱动程序。我的配置是使用V9 JDBC驱动程序。但是,由于类加载的工作方式,类路径上的第一个为两者加载(恰好是V8驱动程序,它不适用于我的应用程序)。

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

        2
  •  0
  •   Jim Garrison    14 年前

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

        3
  •  0
  •   user3666197    8 年前

    对于我来说,我把日期传递给一个字符串列,如下所示

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

    当我将其更改为:

    setString( 5, "20150404" );
    

    我没有上述答案中提到的任何驾驶员问题

    希望这能帮助有类似问题的人