使用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接口不會變,方法就不會變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM