使用Idea连接数据库(事务,数据库连接池)

使用IDEA连接数据库

使用Idea连接数据库(事务,数据库连接池)

使用Idea连接数据库(事务,数据库连接池)

使用Idea连接数据库(事务,数据库连接池)

连接失败,查看原因

使用Idea连接数据库(事务,数据库连接池)

 

10.8、事务

要么都成功,要么都失败

ACID原则

原子性:要么全部完成,要么都不完成

一致性:总数不变

隔离性:多个进程互不干扰

持久性:一旦提交不可逆,持久化到数据库了

 

隔离性的问题:

脏读:一个事务读取了另一个没有提交的事务

不可重复读:在同一个事务内,重复读取表中的数据,表数据发生了改变

虚度(幻读):在一个事务内,读取到了别人插入的数据,导致前后读出来的结果不一致

 

代码实现

1、开启事务 conn.setAutoCommit(false);

2、一组业务执行完毕,提交事务

3、可以在catch语句中显示的定义回滚语句,但默认失败就会回滚

package com.kuang.lesson04;
import com.kuang.lesson02.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TestTransaction1 {
   public static void main(String[] args) {
       Connection conn = null;
       PreparedStatement st = null;
       ResultSet rs = null;

       try {
           conn = JdbcUtils.getConnection();

           //关闭数据库的自动提交,自动会开启事务
           conn.setAutoCommit(false); //开启事务
           String sql1 ="UPDATE `account` SET money = money-500 WHERE `name` = 'A' ";
           st= conn.prepareStatement(sql1);
           st.executeUpdate();
           
      //     int x =1/0;
           
           String sql2 ="UPDATE `account` SET money = money+500 WHERE `name` = 'B' ";
           st= conn.prepareStatement(sql2);
           st.executeUpdate();
           //业务完毕,提交事务
           conn.commit();
           System.out.println("操作成功!");

      } catch (SQLException throwables) {
           try {
               conn.rollback();//如果失败则回滚事务
          } catch (SQLException e) {
               e.printStackTrace();
          }
           throwables.printStackTrace();
      }finally {
           JdbcUtils.release(conn,st,rs);
      }
  }
}
10.9数据库连接池

数据库连接 --- 执行完毕 --- 释放

连接 --- 释放 十分浪费资源

池化技术:准备一些预先的资源,过来就连接预先准备好的

s使用了这些数据库连接池之后,我们在项目开发中就不需要编写连接 数据库的代码了!

DBCP

需要用到的jar包

commons-dbcp-1.4、commons-pool-1.6

C3P0

需要用到的jar包

c3p0-0.9.5.5、mchange-commons-java-0.2.19

结论

无论使用什么数据源,本质还是一样的,DataSource接口不会变,方法就不会变。

上一篇:CF702F T-Shirts 题解


下一篇:java中Jdbc最基础的使用