【概念笔记】JavaEE - jdbc

版权声明:本文为博主原创文章,未经博主允许不得转载。转载请附上博主博文网址,并标注作者。违者必究 https://blog.csdn.net/HuHui_/article/details/54924784

JDBC

jdbc : Java DataBase Connectivity(java数据库连接)

public class JdbcUtil {


    static {
        try{
            // 返回与带有给定字符串名的类或接口相关联的 Class对象。即返回驱动路径
        Class.forName("com.mysql.jdbc.Driver.class");
        }catch(Exception e){
            e.printStackTrace();
        }

    }
    public Connection getConnection(){

        //地址 127.0.0.1是本机地址,端口3306
        String url="jdbc:mysql://127.0.0.1:3306/test";
        //mysql用户名
        String user ="hui";
        //mysql用户的密码
        String password ="password~!";
        //新建一个连接通道
        Connection con=null;
        try{
            //通过地址 用户名 密码 登录mysql并连接
            con=DriverManager.getConnection(url, user, password);
        }catch(Exception e){
            e.printStackTrace();
        }
        return con;
    }
    //连接完数据库,获取资源后要记得释放资源
    public static void closeAll(Connection connection,Statement statement,ResultSet resultSet){
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement!=null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

事务的 ACID

事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持久性( Durability )。这四个特性简称为 ACID 特性。
1 、原子性
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
2 、一致性
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
3 、隔离性
一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
4 、持久性
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

事务操作的关键字

l 手动的开启事务: start transaction

l 手动提交事务: commit —– 表示确认 开启事务后 的若干步操作, 在commit 之后, 那么数据就真的持久化到硬盘上了

l 手动回滚事务: rollback ——— 表示在开启事务后, 中间进行了若干步操作, 如果出现时了异常, 那么回滚事务,这个时候数据不会真的持久化到硬盘上

这几个特性中,最最重要的, 是隔离性, 通常会有程序的多线程并发, 那么在并发访问的时候,最终操作了数据库中的数据,

如果同时操作的是同一张表的同一行记录, 就肯定事务的隔离性问题了.

事务的隔离级别

事务的隔离性:是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务的数据要相互隔离
1. 脏读
脏读是指一个事务读到其他事务未提交的数据,在一个事务处理过程里读取了另一个未提交的事务中的数据
exp:一个事务:用户A向用户B转100RMB。
该事务由两个事件组成,分别是B+100元,A-100元。
如果B执行了+100元,B读取余额多了100,如果出现撤销,则该事务不被提交,回滚原来的状态,则B再次读取发现余额并没有+100,出现了读脏数据。
2. 不可重复读
不可重复读是指一个事务读到其他事务已经提交的数据,在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了,在一个事务内两次读到的数据是不一样的,因此称为是不可重复读

  1. 幻读
    幻读是指一个事务读到其他事务已经提交的数据,事务非独立执行时发生的一种现象。事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。

数据库连接池

数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。

为什么要使用数据库连接池?
一次性批量的制造一些连接Connection对象放到连接池中, 要使用的时候就从这个池子中取出一个连接使用,当用完不再需要使用的时候,
再将连接放回到池子中, 这样就可以在其他的程序要使用连接的时候可以达到复用连接,避免了不断的创建连接,关闭连接, 从而达到了优化.

数据库连接池的运行机制:
(1) 程序初始化时创建连接池
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源
这里写图片描述

常用开源数据库连接池技术:

猜你喜欢

转载自blog.csdn.net/HuHui_/article/details/54924784