2010-09-24 131 views
4

我有一個類型爲XML的列表。當我在Windows上的WebSphere中運行的servlet中向該表插入記錄時,插入成功。然而,當我運行在AIX上正好在WebSphere相同的代碼,我得到以下異常:插入XML列時,如何解決「非法轉換」異常?

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 

我運行WebSphere 6.1針對DB2版本9,z/OS數據庫。

由於平臺的差異,這感覺很像編碼問題。但是誰知道。有什麼建議?

回答

1

事實證明,這是JDBC驅動程序配置的「問題」。

在同一個JVM中運行的另一個應用程序被配置爲使用v8 JDBC驅動程序。 Mine被配置爲使用v9 JDBC驅動程序。但是由於類加載的方式,類路徑中的第一個加載了兩個(它恰好是v8驅動程序,這對我的應用程序來說不起作用)。

修復方法是將兩個應用程序使用V9驅動程序(這是很好的,因爲它理應完全向後兼容。)

0

只是猜測,因爲我不使用DB2,但BLOB列可能要求輸入是字節數組,而不是字符串。

+0

我將完全由這一點 - 如果它沒有在我的工作完全基於Windows的開發環境,然後在基於AIX的測試環境中慘敗。 – Jared 2010-09-24 20:06:49

+0

Thw Windows JDBC驅動程序可能更寬鬆將字符串轉換爲BLOB – 2010-09-27 05:44:34

0

對我來說,我傳遞的日期字符串列如下

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

,當我將其更改爲:

setString(5, "20150404"); 

我沒有任何驅動程序問題,因爲在上述答覆中提到

希望這可以幫助別人誰得到了類似的問題

相關問題