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