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();
            }
            
         }
  • 相关阅读:
    常用sql(转)
    dos
    VS调试 DataTable (转载)
    JS 对象 数组求并集,交集和差集
    js跳出循环的方法区别(break,continue,return)(转载)
    echarts 曲线平滑配置
    js 动态 批量 创建局部或全局变量 (转载)
    电脑 闪屏 无法启动的原因
    js switch case 判断的是绝对相对===,值和类型都要相等
    无法创建“匿名类型”类型的常量值。此上下文仅支持基元类型或枚举类型。
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/10679290.html
Copyright © 2011-2022 走看看