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();
            }
            
         }
  • 相关阅读:
    异常练习
    Comparator 排序 ArrayList 实操练习
    50道Java线程面试题
    Java ArrayList排序方法详解
    Map集合利用比较器Comparator根据Key和Value的排序
    Java Map 键值对排序 按key排序和按Value排序
    实现java随机数Random的几招
    如何在Java中获取键盘输入值
    力扣 ——3Sum python (三数之和)实现
    python中函数用法
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/10679290.html
Copyright © 2011-2022 走看看