• 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();
            }
            
         }
  • 相关阅读:
    dedecms 织梦本地调试 后台反映非常慢的处理办法
    phpcms前端模板目录与文件结构分析图【templates】
    phpcms 思维导图
    Linux下文件的复制、移动与删除
    动态加载dll中的函数
    ava中关于String的split(String regex, int limit) 方法
    java.io.File中的 pathSeparator 与separator 的区别
    如何删除输入法记忆的词汇
    zip4j -- Java处理zip压缩文件的完整解决方案
    file.separator 和 / 区别
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/10679290.html
Copyright © 2020-2023  润新知