使用proxool连接sybase时处理事务的问题
问题描述今天花了一天时间解决一个问题,好久没有这样钻研解决这样的问题了。
http://topic.csdn.net/t/20050608/16/4068615.html
问题跟这个帖子相同,就是使用proxool+sybase处理事务时,会报错。
先看看以下代码
public static void test2() throws Exception {// Connection conn = getConnectionFromPool();Connection conn = getConnection();conn.setAutoCommit(false);Statement stmt = conn.createStatement();String sql = "select 1";stmt.executeQuery(sql);conn.commit();try {conn.setAutoCommit(true);} catch (Exception e) {e.printStackTrace();}stmt.close();conn.close();}public static Connection getConnection() throws Exception {Class.forName("com.sybase.jdbc3.jdbc.SybDriver");String username = "sa";String pwd = "";String url = "jdbc:sybase:Tds:192.168.0.100:5000/test";return DriverManager.getConnection(url, username, pwd);}static public Connection getConnectionFromPool() throws Exception {Connection connection = null;String alias = "test";Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");if (connection == null) {Properties info = new Properties();info.setProperty("proxool.maximum-connection-count", "20");info.setProperty("user", "sa");info.setProperty("password", "");info.put("proxool.maximum-active-time", "60000");String driverClass = "com.sybase.jdbc3.jdbc.SybDriver";String driverUrl = "jdbc:sybase:Tds:192.168.0.100:5000/test";String url = "proxool." + alias + ":" + driverClass + ":"+ driverUrl;connection = DriverManager.getConnection(url, info);System.out.println(connection);}return connection;}在运行test2()函数时没有出现异常正常,这里是没有使用proxool,用原始的数据库连接方式。
将test2()第一行的注释去掉,将第二行注释掉,运行时就会报错
Exception in thread "main" 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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:585)at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:208)at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:98)at com.sybase.jdbcx.SybConnection$$EnhancerByProxool$$8df5facc.setAutoCommit(<generated>)at TestConnectionTran.test(TestConnectionTran.java:34)at TestConnectionTran.main(TestConnectionTran.java:13)问题原因
s_phoenix大侠的解决办法是:
<div class="quote_title"> 写道
页:
[1]