事務 資料庫連線池 DBUtils

2022-09-24 01:27:09 字數 3956 閱讀 3201

事務:

1、事務(transaction):指的是一組操作邏輯,裡面包含了很多個單一的操作邏輯。如果有乙個邏輯失敗,那麼無論其它邏輯是否成功,都算失敗。

2、為什麼需要事務:

為了保證一組關聯邏輯的全部正確執行。舉例:銀行轉賬

3、如何開啟事務,以及事務的兩種結果處理:

開啟事務:start transaction;

兩種結果處理:commit / rollback

4、示例:

關閉自動提交

演示事務:

}5、事務特性:(acid)

原子性:事務中包含的邏輯,不可分割。

一致性:事務執行前後。資料完整性

隔離性:事務在執行期間不應該受到其他事務的影響

永續性:事務執行成功,那麼資料應該持久儲存到磁碟上。

6、事務隔離級別以及對應的安全隱患:

讀未提交(read uncommitted):髒讀

讀已提交(read committed):解決髒讀,引發不可重複的

可重複度(repeatable read):解決髒讀,不可重複的,引發幻讀

可序列化(serializable):解決髒讀,不可重複讀,幻讀  

安全隱患:

讀: 髒讀

乙個事務讀到了另乙個事務未提交的資料

不可重複讀

乙個事務讀到了另乙個事務已提交的資料,造成前後兩次查詢結果不一致

幻讀乙個事務讀到了另乙個事務insert的資料 ,造成前後查詢結果不一致 。

寫:丟失更新。

7、事務隔離級別排序:

按效率(高->低):讀未提交  > 讀已提交  > 可重複讀  > 可序列化

按攔截程度(高->低):可序列化 > 可重複讀 > 讀已提交 >  讀未提交

8、事務只是針對連線連線物件,如果再開乙個連線物件,那麼那是預設的提交。

9、mysql 預設的隔離級別是 可重複讀

oracle 預設的隔離級別是 讀已提交

10、解決丟失更新的方式:

悲觀鎖:

樂觀鎖:

資料庫連線池:

dbcp:

1、不使用配置檔案的方式:

connection conn = null

; preparedstatement ps = null

;

try

catch

(sqlexception e)

finally

2、使用配置檔案方式:

connection conn = null

; preparedstatement ps = null

;

try

catch

(exception e)

finally

cp30:

1、不適用配置檔案

connection conn = null

; preparedstatement ps = null

;

try

catch

(exception e)

finally

2、使用配置檔案(注意:cp30的配置檔案可以用properties或者xml,常用xml)

connection conn = null

; preparedstatement ps = null

;

try

catch

(exception e)

finally

dbutils:1、增刪改

//

dbutils 只是幫我們簡化了crud 的**, 但是連線的建立以及獲取工作。 不在他的考慮範圍

queryrunner queryrunner = new queryrunner(new

combopooleddatasource());

//增加

"insert into account values (null , ? , ? )", "aa" ,1000);

//刪除

"delete from account where id = ?", 5);

//更新

"update account set money = ? where id = ?", 10000000 , 6);

2、查詢

1)匿名內部類方式,自定義返回值的接收配置

queryrunner queryrunner = new queryrunner(new

combopooleddatasource());

account account = queryrunner.query("

select * from account where id = ?

", new resultsethandler()

return

account;

}}, 6);

system.

out.println(account.tostring());

2)使用框架寫好的實現類

查詢單個物件

queryrunner queryrunner = new queryrunner(new

combopooleddatasource());

//查詢單個物件

account account = queryrunner.query("

select * from account where id = ?",

new beanhandler(account.class), 8

);

查詢多個物件

queryrunner queryrunner = new queryrunner(new

combopooleddatasource());

list

list = queryrunner.query("

select * from account ",

new beanlisthandler(account.class));

3、resultsethandler 常用的實現類

beanhandler, 查詢到的單個資料封裝成乙個物件

beanlisthandler, 查詢到的多個資料封裝 成乙個list《物件》

arrayhandler, 查詢到的單個資料封裝成乙個陣列

arraylisthandler, 查詢到的多個資料封裝成乙個集合 ,集合裡面的元素是陣列。

maphandler, 查詢到的單個資料封裝成乙個map

maplisthandler,查詢到的多個資料封裝成乙個集合 ,集合裡面的元素是map。

DBUtils資料庫連線池

使用資料庫連線池技術,可以重複使用多個資料庫連線,避免每次執行資料庫操作都建立連線和關閉連線,也避免了大型應用同時占用多個資料庫連線。以連線mysql為例 import pymysql from dbutils.pooleddb import pooleddb pool pooleddb creat...

DBUtils資料庫連線池

使用資料庫連線池技術,可以重複使用多個資料庫連線,避免每次執行資料庫操作都建立連線和關閉連線,也避免了大型應用同時占用多個資料庫連線。以連線mysql為例 import pymysql from dbutils.pooleddb import pooleddb pool pooleddb creat...

Python資料庫連線池DBUtils

dbutils是python的乙個用於實現資料庫連線池的模組。此連線池有兩種連線模式 如果沒有連線池,使用pymysql來連線資料庫時,單執行緒應用完全沒有問題,但如果涉及到多執行緒應用那麼就需要加鎖,一旦加鎖那麼連線勢必就會排隊等待,當請求比較多時,效能就會降低了。usr bin env pyth...