`
- 浏览:
1549 次
- 性别:
- 来自:
成都
-
java.lang.ClassCastException: oracle.sql.CLOB cannot be cast to oracle.sql.CLOB
[size=medium]项目中遇到的,问题描述:在eclipse中启动tomcat,报上面的错,项目lib下有ojdbc14.jar,解决办法:删掉项目中的ojdbc14.jar包,引用classPath时用tomcat的lib包下的ojdbc14.jar包。
==================================================
Hibernate操作Blob/Clob时,发生cannot be cast to oracle.sql.BLOB错误分析
博客分类: JAVA、WEB开发
OracleSQLHibernateJavaTomcat
作者:隔壁老王(wallimn.iteye.com),本人原创,欢迎转载,转载请保留此信息。2010-06-19
环境:Hibernate3.5.2、jdk1.6、Oracle9.2.0.8、odbc14(9.2.0.8).jar、连接池proxool0.9.1、tomcat6.0
操作Blob时,对Hibernate返回的BLOB类型的实例blob进行强制类型转换时,
即:(oracle.sql.BLOB)blob,
发生类型转换错误(java.lang.ClassCastException),提示信息为cannot be cast to oracle.sql.BLOB,非常奇怪,这似乎不应该呀。
简单看了一下Hibernate的相关源码,原来由Hibernate返回的blob对象实际上是代理类SerializableBlobProxy的实例,提供了java.sql.Blob接口定义的方法(实际上是通过反射的方式),表现得像是个实现java.sql.Blob接口的对象(只是貌似),但实际上是个Proxy类型的实例,因此不能把这个实例转化成oracle.sql.BLOB类型。
当用System.out.println(blob)输出信息的时候,显示的是oracle.sql.BLOB@10fba68,很具迷惑性。但使用System.out.println(blob.getClass().getName())输出信息的时候,显示的是$Proxy6,这显示了真实的情况,也就是说显示了这个实例的真实面目。
一句话,这个实例是个穿着java.sql.Blob马甲的Proxy类型的实例。
原因找到了,解决起来也就不难了。不必困扰于为什么oracle.sql.BLOB类型的实例不能强制转化成oracle.sql.BLOB类型这令人费解的问题了。
解决方法很简单,不过是我花了一整天的时间找到的。
Java代码 收藏代码
SerializableBlobProxy proxy = (SerializableBlobProxy )Proxy.getInvocationHandler(blob);
java.sql.Blob realBlob = proxy.getWrappedBlob();
这样得到的realBlob,是个真正的oracle.sql.BLOB对象,可以进行类型转化了。
另外:
经测试,对realBlob实例执行setBinaryStream(1L)方法时,会报异常。Oracle不支持这个方法,反编译odbc14.jar看了一下源码,调用这个方法,会直接抛出异常。
不使用hibernate时,也可能会遇到这个问题。估计只要系统中用到动态代理技术,都有可能遇到这个怪异的类型转化异常(java.lang.ClassCastException)问题。解决方法应该是类似的。
还有,如果使用tomcat容器以及容器带的DBCP连接池,当tomcat的共享包目录中放的jdbc包与工程中带的jdbc包的版本不一致的时候,也可能引发这个错误。这种情况下,只要把工程中带的jdbc包删掉即可。
[/size]
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
weblogic下转换oracle 的clob类型经常报转型错误,本例子通过反射解决weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB转型成oracle.sql.CLOB问题
ebean,sbean,dto
cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突 使用maven开发web应用程序, 启动的时候报错: jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/...
Java 四种方式操作xml,包括xml,dom,sax,jdom这四种方式的一个简单例子。
简单封装一个精美、好用的菜单型PopupWindow
二:保证 ImageCycleView的 父布局是LinearLayout 否则可能会报异常,比如 java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$...
其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的...java.lang.ClassCastException 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常
例如,要在 REPL 中打印一个不错的堆栈跟踪: => (use 'clj-stacktrace.repl)=> ("foo")java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IFn (NO_SOURCE_FILE:0) Compiler.java:...
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource 可用这个jar替换...
Load canal adapter: es7 failed java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to ...canal-adapter1.1.5报错, 将...
主要介绍了 java.util.ConcurrentModificationException 解决方法的相关资料,需要的朋友可以参考下
解决canal同步es报错: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource
主要介绍了Mybatis报错: org.apache.ibatis.exceptions.PersistenceException解决办法的相关资料,需要的朋友可以参考下
44.java.lang.ClassCastException 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。 45.java.lang....
tomcat8.0.35刚好像没上传成功 java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
QQ 在线状态查询,主要解决java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive的问题,我们将改错误的SoapObject更改为 Object 类型,该错误即可消除
一个基本的libpython-clj项目 希望这将有助于重现我所观察到的问题,该问题在评估代码时启用了nREPL 0.8.2,Clojure 1.10.2... class java.lang.String cannot be cast to class clojure.lang.Keyword ( java.lang.Str
hive的一些报错及解决方法:连接报错、执行脚本卡住、内存溢出报错、表死锁问题
执行使用: make run失败于ClassCastException: org.apache.spark.sql.catalyst.expressions.UnsafeArrayData cannot be cast to org.apache.spark.sql.catalyst.InternalRow当不使用单独的注册器时。 按照建议进行...