如何進行批處理與事務操作

下面用簡單的實例演示一下什么是批處理操作
Statement和PreparedStatement提供例了批處理與事務操作六敬,用來一次執(zhí)行多條語句稠项。下面用Statement操作升筏。

Statement接口提供批處理方法:
  • 添加批處理數(shù)據(jù)public void addBatch(String sql)throws SQLException
  • 執(zhí)行批處理數(shù)據(jù) public int[] executeBatch()throws SQLException
    注:返回的是int數(shù)組撑柔,每個數(shù)據(jù)依次為每條sql影響的行數(shù).
Connection中提供操作事務的方法:
  • 提交事務 public void commit()throws SQLException
  • 撤銷事務public void rollback()throws SQLException
  • 是否為自動提交public void setAutoCommit(boolean autoCommit)throws SQLException
    注:該方法參數(shù)默認為true,為false時程序會將一組SQL作為一個事務調(diào)用commit()執(zhí)行提交您访。
    觀察如下代碼:
package com.dao.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Arrays;
public class Test2 {
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/school";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";
    public static void main(String[] args) throws Exception {
        try {
            Class.forName(DRIVER);
            Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
            Statement stmt = connection.createStatement();
            stmt.addBatch("insert into grade(grade_id,grade_name) VALUES(9,'10');");
            stmt.addBatch("insert into grade(grade_id,grade_name) VALUES(10,'12');");
            stmt.addBatch("insert into grade(grade_id,grade_name) ***VALUES(11,'13');");
            stmt.addBatch("insert into grade(grade_id,grade_name) VALUES(12,'14');");
            int len[] = stmt.executeBatch();
            System.out.println(Arrays.toString(len));
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }   
}

在以上程序中第三條SQL出現(xiàn)錯誤铅忿,但是查詢數(shù)據(jù)庫發(fā)現(xiàn)前兩條數(shù)據(jù)插入成功,這不符合事務操作灵汪,作如下修改檀训,將事務自動提交設為false柑潦,如果沒有出現(xiàn)錯誤,調(diào)用commit提交事務峻凫,否則調(diào)用rollback進行事務回滾渗鬼,將已經(jīng)執(zhí)行成功的數(shù)據(jù)再刪除。

package com.dao.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Arrays;
public class Test2 {
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/school";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";
    public static void main(String[] args) throws Exception {
        Class.forName(DRIVER);
        Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
        connection.setAutoCommit(false);
        Statement stmt = connection.createStatement();
        try {
            stmt.addBatch("insert into grade(grade_id,grade_name) VALUES(9,'10');");
            stmt.addBatch("insert into grade(grade_id,grade_name) VALUES(10,'12');");
            stmt.addBatch("insert into grade(grade_id,grade_name) VALUES(11,'13');");
            stmt.addBatch("insert into grade(grade_id,grade_name) VALUES(12,'14');");
            int len[] = stmt.executeBatch();
            System.out.println(Arrays.toString(len));
            connection.commit();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
            connection.rollback();
        }
    }   
}

以上為手工處理事務荧琼,在開發(fā)中由容器幫我們自動完成譬胎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市命锄,隨后出現(xiàn)的幾起案子堰乔,更是在濱河造成了極大的恐慌,老刑警劉巖脐恩,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镐侯,死亡現(xiàn)場離奇詭異,居然都是意外死亡驶冒,警方通過查閱死者的電腦和手機苟翻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骗污,“玉大人袜瞬,你說我怎么就攤上這事∩肀ぃ” “怎么了邓尤?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贴谎。 經(jīng)常有香客問我汞扎,道長,這世上最難降的妖魔是什么擅这? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任澈魄,我火速辦了婚禮,結(jié)果婚禮上仲翎,老公的妹妹穿的比我還像新娘痹扇。我一直安慰自己,他們只是感情好溯香,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布鲫构。 她就那樣靜靜地躺著,像睡著了一般玫坛。 火紅的嫁衣襯著肌膚如雪结笨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死般眉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的树肃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瀑罗,長吁一口氣:“原來是場噩夢啊……” “哼扫外!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起廓脆,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筛谚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后停忿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驾讲,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年席赂,在試婚紗的時候發(fā)現(xiàn)自己被綠了吮铭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡颅停,死狀恐怖谓晌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情癞揉,我是刑警寧澤纸肉,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站喊熟,受9級特大地震影響柏肪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芥牌,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一烦味、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壁拉,春花似錦谬俄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至案铺,卻和暖如春蔬芥,著一層夾襖步出監(jiān)牢的瞬間梆靖,已是汗流浹背控汉。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工笔诵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姑子。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓乎婿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親街佑。 傳聞我的和親對象是個殘疾皇子谢翎,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355