zoukankan      html  css  js  c++  java
  • DBCP连接池和事物

    工具类案例

     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();
            }
            
         }
  • 相关阅读:
    Spring整合JMS(一)——基于ActiveMQ实现 (转)
    spring mvc入门配置
    Java enum的用法详解 (转)
    php学习日记7(关于“ javascript : ; ”的意思)
    php学习日记6(关于php中json_decode和json_encode的区别)
    php学习日记5(关于php中getCacheAll()方法的使用)
    php学习日记4(关于php中的$this->assign(); 与 $this->display();)
    php学习日记3(关于Mysql中limit用法)
    php学习日记2(关于php中的符号->、=>和::的意思)
    php学习日记1(关于Thinkphp框架中D的含义和用法)
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/10679290.html
Copyright © 2011-2022 走看看