标准的demo:
2、JdbcUtils
JdbcUtils用来获取Connection对象,以及开启和关闭事务。
l Connection getConnection():从c3p0连接池获取Connection对象,所以需要提供c3p0-config.xml配置文件;
l beginTransaction():为当前线程开启事务;
l commitTransaction():提交当前线程的事务;
l rollbackTransaction():回滚当前线程的事务;
l releaseConnection(Connection):如果参数连接对象不是当前事务的连接对象,那么关闭它,否则什么都不做;
c3p0-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <c3p0-config> <default-config> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">123</property> <property name="acquireIncrement">3</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">2</property> <property name="maxPoolSize">10</property> </default-config> </c3p0-config> |
JdbcUtilsTest.java
/** * 测试JdbcUtils类 * @author qdmmy6 * */ public class JdbcUtilsTest { /** * 通过C3P0连接池获取连接对象 * @throws SQLException */ @Test public void testGetConnection() throws SQLException { Connection con = JdbcUtils.getConnection();//获取连接 System.out.println(con); JdbcUtils.releaseConnection(con);//如果参数con不是当前线程的连接对象,那么关闭之 } /** * 当开始事务后,调用getConnection()会为当前线程创建Connection,而且多次调用getConnection()返回的是同一个对象 * @throws SQLException */ @Test public void testTansaction() throws SQLException { JdbcUtils.beginTransaction();//开启事务 Connection c1 = JdbcUtils.getConnection();//第一次获取当前线程的事务连接对象 Connection c2 = JdbcUtils.getConnection();//第二次获取当前线程的事务连接对象 Assert.assertEquals(true, c1 == c2);//比较两次是否相同 JdbcUtils.commitTransaction();//提交事务 } } |
package cn.gaozhen.test;
import static org.junit.Assert.*;
import java.sql.Connection; 如果写成这个 com.mysql.jdbc.Connection将会com.mchange.v2.c3p0.impl.NewProxyConnection cannot be cast to com.mysql.jdbc.Connection
import java.sql.SQLException;
import org.junit.Test;
import cn.itcast.jdbc.JdbcUtils;
public class JdbcUtilsTest {
/*
* JdbcUtils用来获取connection
* 底层用了c3p0连接池
* 需要的jar:c3p0-0.9.2-pre1.jar,mchange-commons-0.2.jar
* 还需要mysql驱动
* mysql-connector-java-5.1.13-bin.jar
*
*
* 因为底层用了c3p0连接池,说明我们还需要c3p0配置文件,
* 放到src下
* /Test/src/c3p0-config.xml
*/
@Test
public void testGetConnection() {
Connection conn;
try {
conn = JdbcUtils.getConnection();
System.out.println(conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testTransaction()
{
try {
JdbcUtils.beginTransaction();//开启事务
//多次操作
JdbcUtils.commitTransaction();//提交事务
} catch (Exception e) {
// TODO: handle exception
}
}
}