【JDBC】資料庫事務
之前因為教師斷了一次網,然後又開始學前端,和js做了一個多月的鬥爭,回過神要講Spring了才發現部落格已經冷了很久了。。。慢慢補上吧
今天先把資料庫事務的一個案例記一下,也是前幾個星期剛剛才會寫的。。
這是做上一個專案的時候用到的一個事務,功能是一張調撥單確認入庫時將資料從待入庫表刪除,加入已入庫表。package mjy.kuguan.ruku.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.text.SimpleDateFormat; import java.util.Date; import mjy.common.util.jdbc.JdbcUtil; import mjy.common.util.jdbc.TransactionManager; import mjy.kuguan.ruku.dao.RukuUserDao; import mjy.kuguan.ruku.po.DiaoborukuPO; /** * 調撥單用事務:調撥入庫單刪除 與 已完成入庫表插入 * @author student * */ public class DiaoboTransaction { //設定本類入庫型別顯示內容 private final String RUKU_TYPE = "調撥入庫"; private Connection conn; private PreparedStatement prep; private TransactionManager transactionManager; private RukuUserDao rukuUserDao = new RukuUserDaoImpl(); /** * 【事務操作】 * 將該條調撥入庫單1.插入入庫完成表 2.從採購入庫表中刪除 * @param diaoborukuPO * @param wanchengChecker */ public void diaoboruku(int diaoboBossId, DiaoborukuPO diaoborukuPO, int wanchengChecker){ //獲取連線 conn = JdbcUtil.getConnection(); //將連線部署於事務管理 transactionManager = JdbcUtil.getTransactionManager(); //開啟事務,關閉自動提交 transactionManager.startTransaction(); /* 事務執行主體 */ //插入語句 String sqlInsert = "insert into kuguan_rukuwancheng values(?,?,?,?,?,?,?,?,?,?,?)"; //刪除語句 String sqlDelete = "delete from kuguan_diaoboruku where diaoboBossId = ? and diaoboCode = ?"; try { //執行插入操作 prep = conn.prepareStatement(sqlInsert); prep.setString(1, Thread.currentThread().hashCode() + "-" + System.currentTimeMillis()); prep.setInt(2, diaoboBossId); prep.setString(3, diaoborukuPO.getDiaoboCode()); //設定入庫單編號 prep.setString(4, diaoborukuPO.getDiaoboDiaobodanCode()); //設定相關單據號 prep.setString(5, RUKU_TYPE); //設定入庫型別 prep.setInt(6, diaoborukuPO.getDiaoboInCount()); //設定入庫數量 prep.setString(7, diaoborukuPO.getDiaoboSetTime()); //設定制單時間 prep.setInt(8, rukuUserDao.getSelectIdByName(diaoborukuPO.getDiaoboAuthor()).get(0)); //設定制單人 prep.setInt(9, wanchengChecker); //設定確認人(唯一輸入項) prep.setString(10, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));//設定確認時間 prep.setString(11, diaoborukuPO.getDiaoboNote()); //設定本單備註 prep.executeUpdate(); //int i=1/0; //測試 //執行刪除操作 prep = conn.prepareStatement(sqlDelete); prep.setInt(1, diaoboBossId); prep.setString(2, diaoborukuPO.getDiaoboCode()); prep.executeUpdate(); } catch (Exception e) {//此處Exception應包含上述所有可能異常 // 期間出現異常時,回滾&釋放連結 transactionManager.rollbackAndClose(); e.printStackTrace(); return;//防止執行finally } finally { //無異常則提交 transactionManager.commitAndClose(); } } }
框架還沒學完也不知道Spring下的事務該怎麼寫,不過好歹會寫原生了。。。原理雖然是這麼個原理不過大概以後不會這麼寫吧,權當入門練習了。。
用到的TransactionManager類也貼一下:
package mjy.common.util.jdbc; import java.sql.Connection; import java.sql.SQLException; /** * �������Ӷ�����ύ ���ع� ����������Ȳ��� * @author igeek * */ public class TransactionManager { private Connection connection = null; public TransactionManager(Connection connection){ this.connection=connection; } /** * �������� */ public void startTransaction(){ try { connection.setAutoCommit(false); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * �ύ���� */ public void commitAndClose(){ try { connection.commit(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JdbcUtil.free(connection); } } /** * �ع����� */ public void rollbackAndClose(){ try { connection.rollback(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JdbcUtil.free(connection); } } }
其他組寫的工具類編碼用的gbk轉utf-8的亂碼,註釋都能猜得出來就不改了。
相關推薦
【JDBC】資料庫事務
之前因為教師斷了一次網,然後又開始學前端,和js做了一個多月的鬥爭,回過神要講Spring了才發現部落格已經冷了很久了。。。慢慢補上吧 今天先把資料庫事務的一個案例記一下,也是前幾個星期剛剛才會寫的。。 package mjy.kuguan.ruku.dao.impl;
【Laravel】資料庫事務
最近公司專案集成了一個支付的模組。由於網路世界是不確定的。說不定哪個操作就出了問題。為了保證資料的正確性我們不得不考慮使用資料庫事務這一特性。本文做一個Laravel資料庫事務的介紹。 知識回顧 一 、事務將一堆的資料庫操作組合到一個工作單元中執行 二 、事務的
【JDBC】實現JDBC實現銀行的轉賬事務
str package b- exceptio hide use play key rgs JDBC中的事務是默認提交的,也就是說每執行一次PreparedStatement,那麽數據就會被寫入到磁盤。如果需要關閉默認提交,使用 void setAutoCommit(fa
【DB2】資料庫的事務日誌已滿。SQLSTATE=57011
問題描述 在使用資料庫的時候報錯如上圖,我們先使用db2 get db cfg for sample檢視相關配置引數,其中sample為資料庫名稱 C:\Users\Thinkpad>db2 get db cfg for sample  
【事務一】資料庫事務
我跟事務可能結了很久的仇,總是因為它被同事們各種笑話,我也甚是慚愧hahahahaha~,今兒閒了來整理一下 一、事務模型 1. 自動事務:在事務中,事務自動提交,發生錯誤時自動回滾
【轉載】MySQL事務以及SELECT ... FOR UPDATE的使用
商品 tail ase -a base 我們 evel erl tel MySQL中的事務,默認是自動提交的,即autocommit = 1; 但是這樣的話,在某些情形中就會出現問題:比如: 如果你想一次性插入了1000條數據,mysql會commit1000次的, 如果我
【JDBC】一、JDBC連接數據庫
connect cti close 一個數據庫 odin forname pass lock catch 1 package com.jdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverMa
【轉】資料庫一對一、一對多、多對多關係
轉自:https://blog.csdn.net/u013144287/article/details/79024130 本來資料庫一對一、一對多、多對多關係並不複雜,但是最近在理解的時候感覺又感覺多了寫新意,所以現在在來總結一下吧 一、首先給出三種關係的例項 1、一對一關係例項 &
【轉】資料庫介紹(MySQL安裝 體系結構、基本管理)
【轉】資料庫介紹(MySQL安裝 體系結構、基本管理) 第1章 資料庫介紹及mysql安裝 1.1 資料庫簡介 資料庫,簡而言之可視為電子化的檔案櫃——儲存電子檔案的處所,使用者可以對檔案中的資料執行新增、擷取、更新、刪除等操作。 所謂“資料庫”系以一定方式儲存在一起、能予多個
【leetcode】資料庫練習三
【練習一】Write a query to print the sum of all total investment values in 2016 (TIV_2016), to a scale of 2 decimal places, for all policy holders
【轉】分散式事務之TCC服務設計和實現注意事項
1、TCC簡介 TCC是一種比較成熟的分散式事務解決方案,可用於解決跨庫操作的資料一致性問題; TCC是服務化的兩階段程式設計模型,其Try、Confirm、Cancel 3個方法均由業務編碼實現; 其中Try操作作為一階段,負責資源的檢查和預留,Confirm操作作為二階段提交操作,執行真正的業務,C
【溫故知新】分散式事務及分散式鎖系列文章總結【石杉的架構筆記】
歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100) 週一至週五早8點半!精品技術文章準時送上! “ 這周我們來小結一下分散式系列的文章,包含分散式事務及分散式鎖,無論是工作還是面試,都是非常重要的一塊知識點。 一 通過一個真實的電商業務場景驅動,我們介紹了什麼是TCC分散式事務、如何
【mysql】資料庫隔離級別read committed && MVCC
前言 可以很負責任的跟大家說,MySQL 中的此隔離級別不單單是通過加鎖實現的,實際上還有repeatable read 隔離級別,其實這兩個隔離級別效果的實現還需要一個輔助,這個輔助就是MVCC-多版本併發控制,但其實它又不是嚴格意義上的多版本併發控制,是不是很懵,沒關
【LeetCode】資料庫
【題目描述】 Employee 表包含所有員工資訊,每個員工有其對應的 Id, salary 和 department Id。 +----+-------+--------+--------------+ | Id | Name | Salary | Departmen
【nodeJS】連線【MySql】資料庫
準備資料庫:redmine 工程結構: config .js var config = { database: 'redmine', // 使用哪個資料庫 username: 'redmine', // 使用者名稱 password:
【學習】資料庫學習 -- 索引的原理
一、索引的基礎認知 索引可以加快資料庫的檢索速度 表常進行增(insert)刪(delete)改(update)操作,不建議建立索引,因為索引會降低增刪改等維護操作的速度 索引佔用物理空間和資料空間 索引具有最左匹配原則 索引分為:聚集索引和非聚集索引 Mysql
【MyBatis】資料庫的一對多查詢:關於resultMap的使用
利用resultMap,能夠將查詢到的複雜資料(比如查詢到幾個表中資料)對映到一個結果集當中。 (1)如下圖所示,在進行一對多查詢時: (2)通常要求不能出現重複記錄,因此需要對結果資料可以進行整合 (3)解決方案:利用resultMap。程式碼如下: i
【Mycat】資料庫效能提升利器(三)——Mycat實現Mysql主從複製和讀寫分離
一、前言 在前一篇文章中,小編向大家 介紹了使用Mycat水平切分資料庫。可以說,使用了水平分庫後,資料庫提升還是很高的。如果想更高的提高資料庫效能,就可以考慮對Mysql進行主從複製和讀寫分離了。 在這篇部落格中,小編就向大家介紹基於Mycat的M
【mysql】 資料庫字符集和排序規則
庫的字符集影響表和欄位的字符集 資料庫字符集 》表的字符集 》 欄位的字符集 (從前往後優先順序由低到高,從左往右繼承,如果表沒設定字符集,繼承資料庫的,如果欄位沒設定,繼承表的) 資料庫的字符集如果是utf8,表和欄位的字符集繼承 欄位的字符集和排序規則繼承自表,例如表的字符集為
【原創】資料庫中為什麼不推薦使用外來鍵約束
引言 其實這個話題是老生常談,很多人在工作中確實也不會使用外來鍵。包括在阿里的JAVA規範中也有下面這一條 【強制】不得使用外來鍵與級聯,一切外來鍵概念必須在應用層解決。 但是呢,詢問他們原因,大多是這麼回答的 每次做DELETE 或者UPDATE都必須考慮外來鍵約束,會導致開發的時候很痛苦,測試資料