工具类案例
public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306" + "/java1203?useUnicode" + "=true&characterEncoding=UTF-8"; public static final String USERNAME = "root"; public static final String PASSWORD = "123456"; /* * 创建连接池BasicDataSource */ public static BasicDataSource dataSource = new BasicDataSource(); //创建ThreadLoacl对象 public static ThreadLocal<Connection> t=new ThreadLocal<Connection>(); //静态代码块 static { //对连接池对象 进行基本的配置 dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动 dataSource.setUrl(URL); //指定要连接的数据库地址 dataSource.setUsername(USERNAME); //指定要连接数据的用户名 dataSource.setPassword(PASSWORD); //指定要连接数据的密码 } /* * 返回连接池对象 */ public static DataSource getDataSource(){ return dataSource; }
获得一条连接
//返回从连接池中获取一条连接 public static Connection getconn() { Connection conn=null; try { conn=dataSource.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; }
事物实现案例
//获取当前对象 public static Connection getCurrentConn() { Connection conn=t.get(); if(conn==null) { conn=getconn(); t.set(conn); } return conn; } //开启事物 public static void start() { try { getCurrentConn().setAutoCommit(false); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //回滚事物 public static void rollback() { try { getCurrentConn().rollback(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //提交事务 public static void commit() { try { getCurrentConn().commit(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
说明:在dao层获取Conn对象时使用此类的,getCurrentConn();静态方法
或者使用连接池QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());在此构造函数中传参
事物的使用:使用事物必须在dao层使用getCurrentConn();静态方法获取conn对象
例子:事物的使用位置
public void transfer(String out,String in,double money) { try { //开始事物 MyDBUtils.start(); accountDao.jianMoney(out, money);//调用到层方法 accountDao.jiaMoney(in, money); } catch (SQLException e) { // TODO Auto-generated catch block //回滚 MyDBUtils.rollback(); e.printStackTrace(); }finally{ //提交事务 MyDBUtils.commit(); } }