首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

sybase使用proxool后的SET CHAINED异常

2013-04-02 
sybase使用proxool后的SET CHAINED错误? ? ? ? 公司原来使用dbcp连接池连接数据库,但是在测试过程中发现db

sybase使用proxool后的SET CHAINED错误

? ? ? ? 公司原来使用dbcp连接池连接数据库,但是在测试过程中发现dbcp存在连接未释放问题,导致数据库连接占满。

? ? ? ? 之后在proxool和c3p0之间,我们选择了前者,因为前者在相对后者效率会高一些(网上资料,时间原因,未做验证)。

? ? ? ? 产品支持多数据库,oracle下,一些正常,但是切换到sybase之后,程序启动开始报:

?

com.sybase.jdbc3.jdbc.SybSQLException: SET CHAINED command not allowed within multi-statement transaction.at com.sybase.jdbc3.tds.Tds.processEed(Tds.java:2942)at com.sybase.jdbc3.tds.Tds.nextResult(Tds.java:2246)at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(ResultGetter.java:69)at com.sybase.jdbc3.jdbc.SybStatement.nextResult(SybStatement.java:220)at com.sybase.jdbc3.jdbc.SybStatement.nextResult(SybStatement.java:203)at com.sybase.jdbc3.jdbc.SybStatement.updateLoop(SybStatement.java:1804)at com.sybase.jdbc3.jdbc.SybStatement.executeUpdate(SybStatement.java:1787)at com.sybase.jdbc3.jdbc.SybPreparedStatement.executeUpdate(SybPreparedStatement.java:116)at com.sybase.jdbc3.tds.Tds.setOption(Tds.java:1278)at com.sybase.jdbc3.jdbc.SybConnection.setAutoCommit(SybConnection.java:1011)at org.logicalcobwebs.proxool.ConnectionResetter.reset(ConnectionResetter.java:288)at org.logicalcobwebs.proxool.ConnectionPool.resetConnection(ConnectionPool.java:918)at org.logicalcobwebs.proxool.ProxyConnection.close(ProxyConnection.java:237)at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:134)at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:87)at com.sybase.jdbcx.SybConnection$$EnhancerByProxool$$4880ae47.close(<generated>)at org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:313)at org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:274)at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion(DataSourceTransactionManager.java:316)at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:989)at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:782)at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:701)at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)at $Proxy26.queryByFilter(Unknown Source)

?

?

? ? ? ??根据网上的资料,该问题产生的原因是sybase开启事务后,需要手动的关闭事务,而项目新版本使用spring的事物管理,所以尚未找到由spirng提供的解决方案。

? ? ? ? 搜索其他解决方案,有资料显示proxool需要配合使用jtds驱动,更换项目驱动,问题解决。

JTDS是一个开放源代码的100%纯Java的,用于JDBC 3.0驱动Microsoft SQL Server (6.5 ,7 ,2000和2005版本)和Sybase(10 ,11 ,12 ,15 版本)的驱动程序 。 JTDS是基于freetds的,并且是目前最快的生产准备JDBC驱动程序为SQL Server和Sybase 。 JTDS完全与JDBC 3.0兼容,支持只向前的,和可滚动/可更新的结果集(ResultSets)中并行(完全独立)语句,并且可实施所有databasemetadata和resultsetmetadata方法。http://sourceforge.net/projects/jtds/

?

热点排行