使用ThreadLocal綁定連接資源(事務)

在這里插入圖片描述

dao層代碼如下:

package beyond.transfer.dao;import java.sql.Connection;
import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import beyond.utils.DataSourceUtils;
import beyond.utils.MyDataSourceUtils;public class TransferDao {public void out( String out, double money) throws SQLException {QueryRunner runner = new QueryRunner();//不用穿參數Connection conn = MyDataSourceUtils.getCurrentConnection();String sql = "update account set money= money-? where name=?";runner.update(conn, sql, money,out);}public void in(String in, double money) throws SQLException {QueryRunner runner = new QueryRunner();//不用穿參數Connection conn = MyDataSourceUtils.getCurrentConnection();String sql = "update account set money= money+? where name=?";runner.update(conn, sql, money,in);}}

service層代碼如下:

package beyond.transfer.service;import java.sql.Connection;
import java.sql.SQLException;import beyond.transfer.dao.TransferDao;
import beyond.utils.DataSourceUtils;
import beyond.utils.MyDataSourceUtils;public class TransferService {public boolean transfer(String out, String in, double money) {//創建dao層對象TransferDao dao = new TransferDao();boolean isTransferSuccess = true;Connection conn = null;try {//進行事務控制,開啟事務//conn = DataSourceUtils.getConnection();//不自動開啟事務,也就是手動開啟事務//conn.setAutoCommit(false);//開啟事務MyDataSourceUtils.startTransaction();//調用dao層的轉出錢的方法,只需要知道 轉錢的人是誰 跟 錢數 就行dao.out(out,money);//調用dao層的轉入錢的方法,只需要知道 轉給誰 跟 錢數 就行dao.in(in,money);} catch (SQLException e) {isTransferSuccess = false;try {//當出現事務錯誤,進行事務的回滾;回滾本身內部不包含提交的功能MyDataSourceUtils.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally{try {MyDataSourceUtils.commit();} catch (SQLException e) {e.printStackTrace();}}return isTransferSuccess;}}

web層代碼如下:

package beyond.transfer.web;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import beyond.transfer.service.TransferService;public class TransferServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接收轉賬的參數String out = request.getParameter("out");String in = request.getParameter("in");String moneyStr = request.getParameter("money");double money=Double.parseDouble(moneyStr);//進行將轉賬金額強轉//調用業務層的轉賬方法TransferService service = new TransferService();boolean isTransferSuccess = service.transfer(out,in,money);//解決亂碼問題response.setContentType("text/html;charset=UTF-8");if(isTransferSuccess){response.getWriter().write("轉賬成功!!!");}else{response.getWriter().write("轉賬失敗!!!");}}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379588.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法---棧和隊列

棧和隊列1 棧棧的順序存儲棧的鏈式存儲2 隊列隊列的順序存儲隊列的鏈式存儲3 棧和隊列的應用用棧實現隊列用隊列實現棧最小棧1 棧 參考文章: https://zhuanlan.zhihu.com/p/346164833 https://zhuanlan.zhihu.com/p/120965372#:~:text%E6%A0%88%E6%98%AF%E4%B8%80%…

學習網站LIST

面向對象的腳本語言Rubyhttp://rubycn.ce-lab.net/20020101.htmlRUBY文檔中心http://www.moer.net/ruby/doc/TCL腳本http://www.tclchina.com/Python快速入門http://wiki.woodpecker.org.cn/moin/WeiZhong/2006-01-17Python 研究(Dive Into Python)http://www.woodpecker.org.c…

再次參加(第七屆)商學院徒步戈壁挑戰賽,賦詞幾首

2012年5月21-25日,再次踏上甘肅莫賀延磧戈壁,參加第七屆商學院徒步戈壁挑戰賽。時隔五年,時空轉換。 少年游 ——戈壁緣 江南物華,遠水碧山,燈火相掩映。暮宴朝歡,酒綠燈紅,躑躅夜歸人。 孤城落…

Java StackTraceElement toString()方法與示例

StackTraceElement類的toString()方法 (StackTraceElement Class toString() method) toString() method is available in java.lang package. toString()方法在java.lang包中可用。 toString() method is used to represent stack trace element as a string or in other word…

增刪改查

web層代碼如下: package beyondwsq.web;import java.io.IOException; import java.sql.SQLException; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; imp…

在WebBrowser中通過模擬鍵盤鼠標操控網頁中的文件上傳控件

引言 這兩天沉迷了Google SketchUp,剛剛玩夠,一時興起,研究了一下WebBrowser。 我在《WebBrowser控件使用技巧分享》一文中曾談到過“我現在可以通過WebBrowser實現對各種Html元素的操控,唯獨無法控制Html的上傳控件”&#xff0c…

編寫最簡單的字符設備驅動

編寫最簡單的字符設備驅動1 編寫驅動代碼2 編寫makefile3 編譯和加載驅動4 編寫應用程序測試驅動參考文章: linux驅動開發第1講:帶你編寫一個最簡單的字符設備驅動 linux驅動開發第2講:應用層的write如何調用到驅動中的write 1 編寫驅動代碼…

Java ObjectStreamField toString()方法與示例

ObjectStreamField類toString()方法 (ObjectStreamField Class toString() method) toString() method is available in java.io package. toString()方法在java.io包中可用。 toString() method is used to return a string that defines this field. toString()方法用于返回定…

linux內核文件描述符fd、文件索引節點inode、文件對象file關系

文件描述符fd、文件索引節點inode、文件對象file關系1 VFS對象1.1 超級塊對象1.2 索引節點對象1.3 文件對象1.4 進程描述符1.5 files_struct2 如何根據文件描述符fd找到文件?1 VFS對象 在說fd、inode和file關系之前,我們先了解VFS的幾個概念。分別是進程…

sql2005 獲取表字段信息和視圖字段信息

獲取表字段名,和字段說明SELECT[Table Name]OBJECT_NAME(c.object_id), [ColumnName]c.name, [Description]ex.value FROMsys.columns c LEFTOUTERJOINsys.exte…

解析css之position

CSS的很多其他屬性大多容易理解,比如字體,文本,背景等。有些CSS書籍也會對這些簡單的屬性進行大張旗鼓的介紹,而偏偏忽略了對一些難纏的屬性講解,有避重就輕的嫌疑。CSS中主要難以理解的屬性包括盒型結構,以…

Java ObjectInputStream readLong()方法(帶示例)

ObjectInputStream類readLong()方法 (ObjectInputStream Class readLong() method) readLong() method is available in java.io package. readLong()方法在java.io包中可用。 readLong() method is used to read 8 bytes (i.e. 64 bit) of long value from this ObjectInputSt…

交換瓶子(藍橋杯)

有N個瓶子,編號 1 ~ N,放在架子上。 比如有5個瓶子: 2 1 3 5 4 要求每次拿起2個瓶子,交換它們的位置。 經過若干次后,使得瓶子的序號為: 1 2 3 4 5 對于這么簡單的情況,顯然,至少…

Linux設備驅動開發---字符設備驅動程序

字符設備驅動程序1 主設備和次設備的概念設備號的注冊和釋放靜態方法動態方法區別2 設備文件操作struct file_operations與struct file、struct inode關系3 分配和注冊字符設備class_createcdev_adddevice_create4 字符設備驅動程序字符設備通過字符(一個接一個的字…

Java LinkedHashMap getOrDefault()方法與示例

LinkedHashMap類的getOrDefault()方法 (LinkedHashMap Class getOrDefault() method) getOrDefault() method is available in java.util package. getOrDefault()方法在java.util包中可用。 getOrDefault() method is used to get the value associated with the given key el…

Java中的異常棧軌跡和異常鏈

Java中允許對異常進行再次拋出,以提交給上一層進行處理,最為明顯的例子為Java的常規異常。 常規異常:有Java所定義的異常,不需要異常聲明,在未被try-catch的情況下,會被默認上報到main()方法。 Example: pu…

貪心算法---背包問題(物品可以分割問題)

問題背景: 有一天,阿里巴巴趕著一頭毛驢上山砍柴。砍好柴準備下山時,遠處突然出現一股煙塵,彌漫著直向上空飛揚,朝他這兒卷過來,而且越來越近。靠近以后,他才看清原來是一支馬隊,他…

同步---信號量

信號量1 信號量2 驅動程序和測試程序3 內核的具體實現總結1 信號量 Linux中的信號量是一種睡眠鎖。如果有一個任務試圖獲得一個已經被占用的信號量時,信號量會將其放到一個等待隊列,然后讓其睡眠,這時處理器去執行其他代碼。當持有信號量的進…

Java Float類floatToIntBits()方法與示例

Float類floatToIntBits()方法 (Float class floatToIntBits() method) floatToIntBits() method is available in java.lang package. floatToIntBits()方法在java.lang包中可用。 floatToIntBits() method follows IEEE 754 floating-point standards and according to standa…

解釋三度帶和六度帶的概念以及各坐標系如何定義

★ 地形圖坐標系:我國的地形圖采用高斯-克呂格平面直角坐標系。在該坐標系中,橫軸:赤道,用Y表示;縱軸:中央經線,用X表示;坐標原點:中央…