程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring 中jdbcTemplate 完成執行多條sql語句示例

Spring 中jdbcTemplate 完成執行多條sql語句示例

編輯:關於JAVA

Spring 中jdbcTemplate 完成執行多條sql語句示例。本站提示廣大學習愛好者:(Spring 中jdbcTemplate 完成執行多條sql語句示例)文章只能為提供參考,不一定能成為您想要的結果。以下是Spring 中jdbcTemplate 完成執行多條sql語句示例正文


說一下Spring框架中運用jdbcTemplate完成多條sql語句的執行:

很多狀況下我們需求處置一件事情的時分需求對多個表執行多個sql語句,比方淘寶下單時,我們確認付款時要對自己銀行賬戶的表裡減去訂單所需的錢數,即需求更新銀行賬戶的表,同時需求更新淘寶訂單的表將訂單形態改為“已付款”,這就需求先後執行多個sql(僅僅用於表達執行多的SQL的舉例闡明,詳細淘寶如何完成並不是很清楚~~~~~); 但假如這兩頭呈現電腦斷網斷電等問題,僅將我們銀行賬戶的錢扣掉了,訂單形態並沒有改,那我們是不是很慘,但實踐上我們並沒有遇到這種狀況對吧,上面我就來講一下如何運用Spring 中jdbcTemplate 完成執行多條sql語句,而不呈現這種狀況

@Test  
public void 權限分配(){
    //1.客戶端復選框傳遞過去一個數組1,2 菜單的ID
    Integer[] menus =new Integer[]{1,2};
    //2.聲明sql數組
    String [] sql =new String [menus.length+1];
    //3.經過Role_id 200 刪除表中數據
    sql[0] = "delete from role_link_menu where fk_role_id=200";
    //4新數據添加到兩頭表
    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);
  }

前提我們曾經銜接好數據庫

這樣我們一共執行了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語句呈現問題都會回滾[**]會一切語句沒有執行前的最初形態^_^

比照上面一組代碼,我們就可以發現其中不同

@Test
  public void 權限分配單個處置() throws Exception{
    //1.經過Role_id 200 刪除表中數據
    String sql = "delect from role_link_menu where fk_role_id=200";
    jdbcTemplate.update(sql);
    //2.客戶端復選框傳遞過去一個數組1,2 菜單的id
    Integer[] menus =new Integer[]{1,2};
    //3.新數據添加到兩頭表
    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);
    }
  }

這裡當i=1會呈現異常順序終止,共執行了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)";

上面一句不會執行,但之前這兩條執行終了,就相當於原本我們要買啤酒喝炸雞,賬戶錢扣了,後果就只給了你一罐啤酒,是不是郁悶捏,啊哈,反正我不會開心

滴~~~ 

**注:

回滾:事務是一組組分解邏輯任務單元的操作,雖然零碎中能夠會出錯,但事務將控制和維護事務中每個操作的分歧性和完好性。

例如,在將資金從一個帳戶轉移到另一個帳戶的銀行使用中,一個帳戶將一定的金額貸記到一個數據庫表中,同時另一個帳戶將相反的金額借記到另一個數據庫表中。由於計算機能夠會因停電、網絡中綴等而呈現毛病,因而有能夠更新了一個表中的行,但沒有更新另一個表中的行。

假如數據庫支持事務,則可以將數據庫操作組成一個事務,以避免因這些事情而使數據庫呈現不分歧。假如事務中的某個點發作毛病,則一切更新都可以回滾到事務開端之前的形態。假如沒有發作毛病,則經過以完成形態提交事務來完成更新。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved