Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1051479
  • 博文数量: 155
  • 博客积分: 5339
  • 博客等级: 大校
  • 技术积分: 1436
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-10 21:41
文章分类

全部博文(155)

文章存档

2016年(3)

2015年(7)

2014年(3)

2013年(1)

2012年(8)

2011年(5)

2010年(1)

2009年(5)

2008年(4)

2007年(26)

2006年(46)

2005年(46)

分类: Java

2006-05-16 16:38:42

  今天测试的时候发现。
  执行语句((com.informix.jdbc.IfmxStatement) stmtInsert).getSerial()[stmtInsert:java.sql.Statement]时报错"java.lang.ClassCastException"
  由于数据连接使用的是tomcat连接池,也就固执的认为是由于类加载器不同产生的问题,到apache把tomcat的配置文件server.xml中与类加载相关的部分看了一下,并把放到了Context里,可是问题依然。我想到应该在weblogic里试一下,使用时发现并没有这样的问题存在,一下子陷入了僵局,不知再从何入手了。
  随便在网上搜了一下,找到下面一段:
(oracle.jdbc.driver.OracleResultSet)dbRst.getBLOB(1)时发生错误.
因为在jdbc连接时,此处的ResultSet为java.sql.ResultSet,是oracle.jdbc.driver.OracleResultSet的超类,所以转换不会出错.
而当我们使用dbcp时,此处返回的ResultSet为org.apache.commmons.dbcp.DelegatingResultSet类型.所以转换会出错.
  我突然意识到我的错误与此如出一辙,立刻豁然开朗。
  Tomcat连接池返回的Statement,Result等等都是common-dbcp里java.sql.*的子类,而不是com.informix.jdbc.*内的类,返回的Statement实际是org.apache.commmons.dbcp.DelegatingStatement,它继承了java.sql.Statement接口,com.informix.jdbc.IfmxStatement则治不了它了,所以产生了"java.lang.ClassCastException"错误。
  问题找到了,解决办法却是不得不放弃使用这种方法,只能用执行sql(“select dbinfo('sqlca.sqlerrd1') from tablename”)代替。
  最后要说一下,weblogic的连接池不会有这样的问题,应该是由于连接池返回的就是jdbc驱动内的类的实例。
阅读(2300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~