From 3bd53827c8c552aba8c0bacdb779e31ac6310c6f Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 12 Oct 2011 07:33:50 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3setDefaultAutoCommit=E4=B8=8D?= =?UTF-8?q?=E8=B5=B7=E4=BD=9C=E7=94=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@943 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 4 + .../com/alibaba/druid/pool/TestRollBack.java | 104 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/pool/TestRollBack.java diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 714d6d9302..913f3395cd 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -388,6 +388,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat new ActiveConnectionTraceInfo(poolalbeConnection, System.currentTimeMillis(), stackTrace)); } + + if (!this.isDefaultAutoCommit()) { + poolalbeConnection.setAutoCommit(false); + } return poolalbeConnection; } diff --git a/src/test/java/com/alibaba/druid/pool/TestRollBack.java b/src/test/java/com/alibaba/druid/pool/TestRollBack.java new file mode 100644 index 0000000000..e42b51a2aa --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/TestRollBack.java @@ -0,0 +1,104 @@ +package com.alibaba.druid.pool; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.util.JdbcUtils; + +public class TestRollBack extends TestCase { + + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + + dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mysql://10.20.144.27/druid?useUnicode=true&characterEncoding=UTF-8"); + dataSource.setUsername("dragoon_test"); + dataSource.setPassword("dragoon_test"); + dataSource.setFilters("stat,trace,encoding"); + dataSource.setDefaultAutoCommit(false); + + createTable(); + } + + protected void tearDown() throws Exception { + dropTable(); + dataSource.close(); + } + + public void test_druid() throws Exception { + Connection conn = null; + try { + conn = dataSource.getConnection(); + + insert(conn, 1, "abc"); + insert(conn, 2, "1234567"); + } catch (Exception e) { + conn.rollback(); + } finally { + JdbcUtils.close(conn); + } + + Assert.assertEquals(0, count()); + } + + public int count() throws Exception { + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + try { + conn = dataSource.getConnection(); + stmt = conn.createStatement(); + rs = stmt.executeQuery("SELECT COUNT(*) FROM T_0"); + rs.next(); + return rs.getInt(1); + } finally { + JdbcUtils.close(rs); + JdbcUtils.close(stmt); + JdbcUtils.close(conn); + } + } + + private void insert(Connection conn, int id, String value) throws Exception { + String sql = "insert into T_0 (ID, NAME) VALUES (?, ?)"; + + PreparedStatement stmt = null; + + try { + stmt = conn.prepareStatement(sql); + stmt.setInt(1, id); + stmt.setString(2, value); + stmt.execute(); + } finally { + JdbcUtils.close(stmt); + } + } + + private void dropTable() throws Exception { + String ddl = "DROP TABLE T_0"; + Connection conn = dataSource.getConnection(); + + Statement stmt = conn.createStatement(); + stmt.execute(ddl); + stmt.close(); + + conn.close(); + } + + private void createTable() throws Exception { + String ddl = "CREATE TABLE T_0 (ID INT PRIMARY KEY, NAME VARCHAR(5))"; + Connection conn = dataSource.getConnection(); + + Statement stmt = conn.createStatement(); + stmt.execute(ddl); + stmt.close(); + + conn.close(); + } + +}