jdbcUtils用来获取connection,底层使用了c3p0连接池,还需要mysql驱动!
首先需要导入三个jar的包文件,和一个c3p0的配置文件(c3p0-config.xml),如下图的三个文件,导入后 build path 一下.
下面的三个bar文件 ----> 链接: 三个jar包文件 密码: 549q.
还要导入这个jar包文件(JUnit.jar),用于@test.
最后把那个c3p0-config.xml的配置文件放入到src目录下.
双击配置文件c3p0-config.xml,修改自己的连接地址以及端口号,写上自己的mysql的用户名和密码.
代码如下:
package cn.itcast.test; import java.sql.SQLException; import org.junit.Test; import cn.itcast.jdbc.JdbcUtils; import com.mysql.jdbc.Connection; /* * jdbcUtils用来获取connection * 底层使用了c3p0连接池! * 还需要mysql驱动 */ public class jdbcutilsTest { /* * 底层使用了c3p0连接池,说明我们还要提供c3p0配置文件 */ @Test public void testGetconnec() throws SQLException{ Connection con = (Connection) JdbcUtils.getConnection(); System.out.println(con); JdbcUtils.releaseConnection(con); //关闭连接,为什么不用close关闭,因为close是保证一定关闭,这个是和事务挂钩的,它与事务没关系就会关闭连接,与事务有关系就会不关闭! System.out.println(con.isClosed()); } /* * JdbcUtils还提供了事务相关的功能 */ @Test public void testTransaction(){ try { JdbcUtils.beginTransaction();//开启事务 //多次操作 JdbcUtils.commitTransaction();//提交事务 } catch (Exception e) { try { JdbcUtils.rollbackTransaction();//回滚事务 } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }
上面就是事务的开启与提交与回滚,下面是具体用到的事务的代码.
@Test public void testUpdate2() throws Exception{ try { JdbcUtils.beginTransaction(); //开启事务 String sql = "insert into reader(pid,pname,age,sex)values(?,?,?,?)"; QueryRunner qr = new TxQueryRunner(); //我们没有给对象提供连接池 Object[] params = {"2","p2",2,"女"}; //给sql中对应的参数 qr.update(sql,params); //执行 if (false) { //如果为true抛出了异常,后面的params语句就不能执行了,就会到回滚事务. //并且前面的String sql 代码也不会执行 throw new Exception(); } params = new Object[]{"3","p3",3,"女"}; qr.update(sql,params); //执行 JdbcUtils.commitTransaction(); //提交事务 } catch (Exception e) { try { JdbcUtils.rollbackTransaction(); //回滚事务 } catch (SQLException e2) { // TODO: handle exception } // TODO: handle exception throw e; } }代码中具体讲解了事务的用法,有不清楚的可以问我!