• 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();
            }
            
         }
  • 相关阅读:
    C#中的Singleton模式
    C#中的TemplateMethod模式
    从汉堡加料说起——浅谈C#中的Decorator模式
    轻松实现记录与撤销——C#中的Command模式
    分布式系统一致性问题与Raft算法(上)
    Scala函数式编程(五) 函数式的错误处理
    Spark RPC框架源码分析(三)Spark心跳机制分析
    AnalyticDB实现和特点浅析
    java并发编程 --并发问题的根源及主要解决方法
    数据的存储结构浅析LSM-Tree和B-tree
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/10679290.html
Copyright © 2020-2023  润新知