我使用的是INFORMIX数据库,有时需要使用INFORMIX JDBC中附加的功能,如IfxStatement的getSerial()方法,可是执行 语句 int iid=((com.informix.jdbc.IfmxStatement)stmt).getSerial();
时会出错,org.apache.tomcat.dbcp.dbcp.DelegatingStatement cannot be cast to com.informix.jdbc.IfmxStatement如果是用
ctx=new InitialContext();
ds=ctx.lookup(...);
conn=ds.getConnection();
stmt=conn.createStatement();
做的就会出现上面的错误,
但用
Class.forName("com.informix.jdbc.IfxDriver");
conn=DriverManager.getConnection(url);
stmt=conn.createStatement();
做就不会出错,
请教一下,难道配置数据源,JDBC驱动还要另外做些什么吗?
时会出错,org.apache.tomcat.dbcp.dbcp.DelegatingStatement cannot be cast to com.informix.jdbc.IfmxStatement如果是用
ctx=new InitialContext();
ds=ctx.lookup(...);
conn=ds.getConnection();
stmt=conn.createStatement();
做的就会出现上面的错误,
但用
Class.forName("com.informix.jdbc.IfxDriver");
conn=DriverManager.getConnection(url);
stmt=conn.createStatement();
做就不会出错,
请教一下,难道配置数据源,JDBC驱动还要另外做些什么吗?
你这个强制类型转换的时候出的错,你的stmt的类型是org.apache.tomcat.dbcp.dbcp.DelegatingStatement
和com.informix.jdbc.IfmxStatement没有继承关系,怎么能转换?看一看api,如果提供方法转换,就使用方法,显然这里不能强转
抢分了强分了
是说不能转换
Class.forName("com.informix.jdbc.IfxDriver");
conn=DriverManager.getConnection(url);
返回的是informix驱动提供的connection用dbcp返回的估计是一个 动态connection之类的东西,不知道你的连接池里有没有指定 驱动的类com.informix.jdbc.IfmxStatement,如果指定了的话,还是出现这个问题,那就说明dbcp返回的是一个各个数据库通用的对象,你只能调用通用的方法,而无法调用某数据库特有的方法。个人分析,虽然没用过informix,但是从你提供的信息分析感觉应该是这个样子
一般都是用后者,红色的地方是驱动,我这里是oracle
<Context path="/adminroot" docBase="adminroot" debug="0" reloadable="true">
<Resource name="jdbc/myDataSource" auth="Container"
type="javax.sql.DataSource">
</Resource>
<ResourceParams name="jdbc/myDataSource">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>200</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
<parameter>
<name>username</name>
<value>shinwa</value>
</parameter>
<parameter>
<name>password</name>
<value>shinwa</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@192.168.2.27:1521:orcl</value>
</parameter>
</ResourceParams>
</Context>
Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();
...
conn.close()中文的:
http://hi.baidu.com/yyflyons2008/blog/item/ff0e75008c512016738b65ae.html