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

    一、事物

      1.事物指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。

      2.Mysql中的事物默认是自动开关的

      3.数据库开启事务命令

          3.1start transaction:开启一次事物。该语句后面的sql语句都处于同一次事务中

          3.2rollback:回滚。事务结束(不明白)

          3.3commit:事务提交。事务结束。

      4.JDBC中事务的基本操作

           4.1JDBC程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动想数据库提交在它上面发送的SQL语句。

                 若想关闭这种默认提交方式,让多条SQL在一条事物中执行,使用一下语句

                4.1.1Connection.setAutoCommit(boolean auto):看数据库。true是自动提交事务。false是手工控制事务。

                        设置为false,就如同执行sql语句start transaction

                4.1.2Connection.rollback():就如同执行sql语句rollback

                         rollback(Saveponit sp):回滚到一个回滚点语

                        4.1.2.1Savepoint代表一个回滚点

                        4.1.2.2Connection.setSavepoint()创建一个回滚点

                4.1.3Connection.commit():事务提交;就如同sql语句commit

    二、事务的特性以及隔离级别

       1.事务的特性:

            1.1原子性(Atomicity):指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

            1.2一致性(Consistency):指事务必须使数据库从一种状态换成另外一种一致性的状态

            1.3隔离性(Isolation):指一个事务不能被其他线程的事务所打扰

            1.4持久性(Durability):事务的操作结果能被永久的保存住。

       2.事务的隔离姓(多线程操作共同的数据时)

           2.1如果不考虑隔离性会出现一下问题

           2.1.1脏读:指一个事务读到了另一个事务中未提交的数据。

           2.1.2不可重复读:指一个事务前后读到的“同一条记录”不一致。

           2.1.3虚读(幻读):指一个事务前后读到的同一张表的记录条数不一致。

       2.2数据库可以通过设置隔离级别来控制以上不正常发生的情况

           MySQL的四种隔离级别

           2.2.1READ UNCOMMITTED:最低级别。脏读、不可重复读、虚读都可能发生。

           2.2.2READ COMMITTED:防止脏读发生,不可重复读、虚读有可能发生

           2.2.3REPEATABLE READ:防止脏读、不可重复读发生,虚读有可能发生。一般设置为该级别

           2.2.4SERIALIZABLE:最高级别,防止脏读、不可重复读、虚读。

       2.3MySQL与事务隔离级别操作有关的语句

             SELECT @@tx_isolation:查看当前的事务隔离级别

             SET transaction isolation level 隔离级别(就是上面的四种级别)

      2.4JDBC程序中控制隔离级别

             2.4.1在JDBC中有四个常量表示四个级别

                     Connection:

                     int TRANSACTION_READ_UNCOMMITTED:

                     int TRANSACTION_READ_COMMITTED

                     int TRANSACTION_REPEATABLE_READ 

                     int TRANSACTION_SERIALIZABLE

              2.4.2Connection.setTransactionIsolation(int level):设置隔离级别

                     一定要在事务开启前设置隔离级别,否则无效

    三、数据库连接池

          1.数据库连接原理

              数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”   中取出一个,使用完毕之后再放回去

              标准的数据源就要实现javax.sql.DataSource接口

          2.编程的难点:调用close方法时,应该把连接对象返回池总,就需要改进close方法。

               改进可以有一下三种方式

                 1)继承(不适用)

                 2)包装设计模式

             开发步骤

                 1>定义一个类,实现与被增强对象相同的接口或者继承已有包装类或者被增强对象

                 2>类中定义一个私有变量,记住被增强对象的引用

                 3>定义一个构造方法,传入被增强对象

                 4>对于要增强的方法,直接编写增强代码即可

                 5>对于不需要增强的方法,调用原有对象的方法。

           3.默认适配器设计模式

                3.1原理:用一个抽象类去实现那个拥有多个方法的接口,在这个抽象类中实现该接口的所有方法,但都是空方法去实现的。

                       以后只需要继承这个抽象类,不需要去继承原有的接口,只要实现所需要的方法就可以了

            4.动态代理

                4.1基于接口:被代理对象有实现的接口。Proxy

                4.2基于子类:CGLIB开库

            5.两个开源的数据连接池           

                 5.1DBCP

                      DBCP:Apache开发的。Database Conntion Pool

                       步骤:

                           1)拷jar包commons-dbcp.jar commons-pool.jar

                           2)建立一个配置文件:*.properties

                           3)建一个工具类

  • 相关阅读:
    NSURLSession实践(结合POST和GET请求JSON和XML数据)
    自己写的一个图片轮播器
    UIImage的一些使用技巧
    NSURLSession学习
    升级Xcode7之后的适配问题(插件、ATS等)
    UITabBarController详解
    解析xml && json
    [11]UITableView编辑 删除 添加 移动 单例 及其去掉TableView没内容的Cell
    nonatomic, retain,weak,strong用法详解
    [10]UITableView表示图2 自适应高度
  • 原文地址:https://www.cnblogs.com/baiduligang/p/4247679.html
Copyright © 2011-2022 走看看