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)建一个工具类

  • 相关阅读:
    XAML学习笔记之Layout(五)——ViewBox
    XAML学习笔记——Layout(三)
    XAML学习笔记——Layout(二)
    XAML学习笔记——Layout(一)
    从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
    从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
    Sql Server 2012 事务复制遇到的问题及解决方式
    Sql Server 2008R2升级 Sql Server 2012 问题
    第一次ACM
  • 原文地址:https://www.cnblogs.com/baiduligang/p/4247679.html
Copyright © 2011-2022 走看看