事務的特性acid
原子性(atomicity):指事務是乙個不可分割的工作單位,事務中的操作。要麼都發生,要麼都不發生。
一致性(consistency):乙個事務中,事務前後資料的完整性必須保持一致。
隔離性(isolation):是指多個使用者併發訪問資料庫時,乙個使用者的 事務不能被其它使用者的事務所干擾,多個併發事務之間資料要相互隔離。
永續性(durability):指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影
什麼是事務
一件事情有n個組成單元 要不這n個組成單元同時成功 要不n個單元就同時失敗。就是將n個組成單元放到乙個事務中
2.mysql的事務
預設是自動事務:
執行sql語句:executeupdate() ---- 每執行一次executeupdate方法就代表事務自動提交。
通過jdbc的api手動事務:
開啟事務:conn.setautocomnmit(false);
提交事務:conn.commit();
回滾事務:conn.rollback();
注意:控制事務的connnection必須是同乙個
執行sql的connection與開啟事務的connnection必須是同乙個才能對事務進行控制
四、 dbutils事務操作
queryrunner
有參構造:queryrunner runner = new queryrunner(datasource datasource);
有參構造將資料來源(連線池)作為引數傳入queryrunner,queryrunner會從連線池中獲得乙個資料庫連線資源運算元據庫,所以直接使用無connection引數的update方法即可運算元據庫
無參構造:queryrunner runner = new queryrunner();
無參的構造沒有將資料來源(連線池)作為引數傳入queryrunner,那麼我們在使用queryrunner物件運算元據庫時要使用有connection引數的方法
簡單來說,當我們的sql需要進行事務控制使用無參構造,不需要事務控制使用有參構造。
第一步:先寫乙個jsp
第二步:書寫web層,負責獲取頁面的資料,呼叫service層的資料web層是乙個servlet,需要自行建乙個servlet}第三步:書寫dao層,處理資料庫的資料,並反饋給service層
public第四步:書寫service層void
out(connection conn,string out, double
money) throws sqlexception
public
void
in(connection conn,string in, double
money) throws sqlexception
public boolean tranfer(string out, string in, double money) catch (exception e) catch (sqlexception e1)
e.printstacktrace();
}finally catch (sqlexception e)
}
return istranfersuccess;
}
事務(轉賬功能)
轉賬時必須雙方同時成功,要麼同時失敗,就是把雙方組成單元放到事務中 1 顯示的開啟乙個事務 start transaction 2 事務提交 commit代表從開啟事務到事務提交 中間的所有的sql都認為有效 真正的更新資料庫 3 事務的回滾 rollback 代表事務的回滾 從開啟事務到事務回滾 ...
事務例子 模擬轉賬
需求 需求 有乙個轉賬功能 service transfer to,from,money reducebalance to,money 模擬錯誤i 5 0 increasebalance from,money dao reducebalance userid,money increasebalanc...
mysql模擬事務轉賬
測試事務 建立表create table account id int 3 notnull auto increment name varchar 30 not null money decimal 9 2 not null primary key id engine innodb default ...