国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Spring 中jdbcTemplate 實現(xiàn)執(zhí)行多條sql語句示例

2019-11-26 13:15:21
字體:
供稿:網(wǎng)友

說一下Spring框架中使用jdbcTemplate實現(xiàn)多條sql語句的執(zhí)行:

很多情況下我們需要處理一件事情的時候需要對多個表執(zhí)行多個sql語句,比如淘寶下單時,我們確認(rèn)付款時要對自己銀行賬戶的表里減去訂單所需的錢數(shù),即需要更新銀行賬戶的表,同時需要更新淘寶訂單的表將訂單狀態(tài)改為“已付款”,這就需要先后執(zhí)行多個sql(僅僅用于表達(dá)執(zhí)行多的SQL的舉例說明,具體淘寶如何實現(xiàn)并不是很清楚~~~~~); 但如果這中間出現(xiàn)電腦斷網(wǎng)斷電等問題,僅將我們銀行賬戶的錢扣掉了,訂單狀態(tài)并沒有改,那我們是不是很慘,但實際上我們并沒有遇到這種情況對吧,下面我就來講一下如何使用Spring 中jdbcTemplate 實現(xiàn)執(zhí)行多條sql語句,而不出現(xiàn)這種情況

@Test  public void 權(quán)限分配(){    //1.客戶端復(fù)選框傳遞過來一個數(shù)組1,2 菜單的ID    Integer[] menus =new Integer[]{1,2};    //2.聲明sql數(shù)組    String [] sql =new String [menus.length+1];    //3.通過Role_id 200 刪除表中數(shù)據(jù)    sql[0] = "delete from role_link_menu where fk_role_id=200";    //4新數(shù)據(jù)添加到中間表    for (int i=0;i<menus.length;i++) {      sql[i+1]="insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+"',200,             "+menus[i]+")";    }    jdbcTemplate.batchUpdate(sql);  }

前提我們已經(jīng)連接好數(shù)據(jù)庫

這樣我們一共執(zhí)行了3條SQL語句

1.delete from role_link_menu where fk_role_id=200

2.insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+"',200,1")";

3.insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+"',200,2")";

這期間任一條SQL語句出現(xiàn)問題都會回滾[**]會所有語句沒有執(zhí)行前的最初狀態(tài)^_^

對比下面一組代碼,我們就可以發(fā)現(xiàn)其中不同

@Test  public void 權(quán)限分配單個處理() throws Exception{    //1.通過Role_id 200 刪除表中數(shù)據(jù)    String sql = "delect from role_link_menu where fk_role_id=200";    jdbcTemplate.update(sql);    //2.客戶端復(fù)選框傳遞過來一個數(shù)組1,2 菜單的id    Integer[] menus =new Integer[]{1,2};    //3.新數(shù)據(jù)添加到中間表    for (int i=0;i<menus.length;i++) {      String menu_sql="insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+           "',200,"+menus[i]+")";      if(i==1){        throw new Exception("=====");      }      jdbcTemplate.update(menu_sql);    }  }

這里當(dāng)i=1會出現(xiàn)異常程序終止,共執(zhí)行了2條語句

1.delect from role_link_menu where fk_role_id=200

2.insert into role_link_menu(id,fk_role_id,fk_menu_id) values ('"+UUID.randomUUID().toString()+ "',200,1)";

下面一句不會執(zhí)行,但之前這兩條執(zhí)行完畢,就相當(dāng)于本來我們要買啤酒喝炸雞,賬戶錢扣了,結(jié)果就只給了你一罐啤酒,是不是郁悶?zāi)螅」凑也粫_心

滴~~~ 

**注:

回滾:事務(wù)是一組組合成邏輯工作單元的操作,雖然系統(tǒng)中可能會出錯,但事務(wù)將控制和維護(hù)事務(wù)中每個操作的一致性和完整性。

例如,在將資金從一個帳戶轉(zhuǎn)移到另一個帳戶的銀行應(yīng)用中,一個帳戶將一定的金額貸記到一個數(shù)據(jù)庫表中,同時另一個帳戶將相同的金額借記到另一個數(shù)據(jù)庫表中。由于計算機可能會因停電、網(wǎng)絡(luò)中斷等而出現(xiàn)故障,因此有可能更新了一個表中的行,但沒有更新另一個表中的行。

如果數(shù)據(jù)庫支持事務(wù),則可以將數(shù)據(jù)庫操作組成一個事務(wù),以防止因這些事件而使數(shù)據(jù)庫出現(xiàn)不一致。如果事務(wù)中的某個點發(fā)生故障,則所有更新都可以回滾到事務(wù)開始之前的狀態(tài)。如果沒有發(fā)生故障,則通過以完成狀態(tài)提交事務(wù)來完成更新。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 清水河县| 延吉市| 马鞍山市| 江山市| 麦盖提县| 永定县| 万全县| 敦化市| 阿拉尔市| 白山市| 阿勒泰市| 专栏| 额尔古纳市| 涞源县| 武鸣县| 根河市| 民县| 伊金霍洛旗| 龙口市| 黄山市| 高密市| 顺平县| 冷水江市| 孝昌县| 城步| 鲜城| 合肥市| 达孜县| 舟山市| 玉环县| 白朗县| 石嘴山市| 法库县| 衡水市| 安图县| 米脂县| 玉山县| 右玉县| 永宁县| 广东省| 皋兰县|