亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java基于JDBC實現事務,銀行轉賬及貨物進出庫功能示例

2024-07-13 10:15:41
字體:
來源:轉載
供稿:網友

本文實例講述了Java基于JDBC實現事務,銀行轉賬及貨物進出庫功能。分享給大家供大家參考,具體如下:

1. 轉賬業務

轉賬必須執行2個sql語句(update更新)都成功的情況下,提交事務,如果有一個失敗,則2個都回滾事務

2. 事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。
一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對并發的其他事務是隔離的,并發執行的各個事務之間不能互相干擾。
持久性(durability)。持久性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

3. 這里以轉賬操作為案例進行演示說明,其注意點如下:

(1)一個sql語句操作不需要手動提交事務

(2)查詢操作也不需要手動提交事務,

(3)但是更新,插入,刪除都需要手動提交事務

(4)余額為負的可以先查詢出結果再進行判斷,然后再操作

(5)con.setAutoCommit(false);手動開啟事務;con.commit();手動提交事務;con.rollback();事務回滾操作

4. 首先創建一個數據表或者兩個數據表,這里為了演示清楚創建兩個數據表

Java,JDBC,事務,銀行轉賬,貨物進出庫

Java,JDBC,事務,銀行轉賬,貨物進出庫

5. 創建好數據庫和數據表,然后進行工具類的書寫BaseDao.java

package com.bie.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/*** @author BieHongLi* @version 創建時間:2017年2月27日 上午10:09:00* 連接數據庫的工具類*/public class BaseDao {  private static String driver="com.mysql.jdbc.Driver";  private static String url="jdbc:mysql:///test";  private static String user="root";  private static String password="123456";  /***   * 連接數據庫的方法   * @return   * @throws ClassNotFoundException   * @throws SQLException   */  public static Connection getCon() throws ClassNotFoundException, SQLException{    Class.forName(driver);//加載數據庫驅動    System.out.println("測試加載數據庫成功");    Connection con=DriverManager.getConnection(url, user, password);    System.out.println("測試數據庫鏈接成功");    return con;  }  /***   * 關閉數據庫的方法   * @param con   * @param ps   * @param rs   */  public static void close(Connection con,PreparedStatement ps,ResultSet rs){    if(rs!=null){//關閉資源,避免出現異常      try {        rs.close();      } catch (SQLException e) {        // TODO Auto-generated catch block        e.printStackTrace();      }    }    if(ps!=null){      try {        ps.close();      } catch (SQLException e) {        // TODO Auto-generated catch block        e.printStackTrace();      }    }    if(con!=null){      try {        con.close();      } catch (SQLException e) {        // TODO Auto-generated catch block        e.printStackTrace();      }    }  }  /***   * 同意增刪改的方法   * @param sql   * @param arr   * @return   */  public static boolean addUpdateDelete(String sql,Object[] arr){    Connection con=null;    PreparedStatement ps=null;    try {      con=BaseDao.getCon();//第一步 :連接數據庫的操作      ps=con.prepareStatement(sql);//第二步:預編譯      //第三步:設置值      if(arr!=null && arr.length!=0){        for(int i=0;i<arr.length;i++){          ps.setObject(i+1, arr[i]);        }      }      int count=ps.executeUpdate();//第四步:執行sql語句      if(count>0){        return true;      }else{        return false;      }    } catch (ClassNotFoundException e) {      // TODO Auto-generated catch block      e.printStackTrace();    } catch (SQLException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    return false;  }  /*public static void main(String[] args) {    try {      BaseDao.getCon();    } catch (ClassNotFoundException e) {      // TODO Auto-generated catch block      e.printStackTrace();    } catch (SQLException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }*/}

6. 這里直接在主方法里面進行了測試,所以寫了UserDao進行測試,看效果即可。

package com.bie.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import com.bie.utils.BaseDao;/*** @author BieHongLi* @version 創建時間:2017年2月27日 下午3:19:49**/public class UserDao {  /***   * 注意點:   *   (1)一個sql語句操作不需要手動提交事務   *   (2)查詢操作也不需要手動提交事務,   *   (3)但是更新,插入,刪除都需要手動提交事務   *  (4)余額為負的可以先查詢出結果再進行判斷,然后再操作   * @param args   */  public static void main(String[] args) {    Connection con=null;    PreparedStatement ps1=null;    PreparedStatement ps2=null;    try {      //第一步:連接數據庫的操作      con=BaseDao.getCon();      //默認自動提交事務,所以默認是true,現在將true改為false,禁止默認自動提交事務      //con.setAutoCommit(true);      //事務1:如果設置為false,則需要手動提交事務      con.setAutoCommit(false);      //第二步:更新的sql語句      String sql="update bank_a set usera_rmb=usera_rmb-500 where usera_id=1 ";      String sql2="update bank_b set userb_rmb=userb_rmb+500 where userb_id=1 ";      //第三步:預編譯sql      ps1=con.prepareStatement(sql);      //第四步:執行sql語句,雖然執行了sql,但是還沒持久化更新到數據庫      ps1.executeUpdate();      //第三步:預編譯sql2      ps2=con.prepareStatement(sql2);      //第四步:執行sql2,雖然執行了sql2,但是還沒持久化更新到數據庫      ps2.executeUpdate();      System.out.println("轉賬成功...");      //事務2:手動提交事務,如果兩個都執行成功了,那么提交事務      con.commit();    } catch (ClassNotFoundException e) {      e.printStackTrace();      try {        //事務3:如果拋出異常,那么回滾事務        con.rollback();      } catch (SQLException e1) {        e1.printStackTrace();      }    } catch (SQLException e) {      e.printStackTrace();    }finally {      //關閉資源,避免出現異常      BaseDao.close(con, ps1, null);      BaseDao.close(null, ps2, null);    }  }}

演示效果如下所示:

Java,JDBC,事務,銀行轉賬,貨物進出庫

 

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91深夜福利视频| 黄色91在线观看| 亚洲精品国产品国语在线| 欧美在线观看网址综合| 久久国产精品免费视频| 中文字幕在线视频日韩| 亚洲国产成人在线播放| 成人国产精品免费视频| 亚洲精品黄网在线观看| 中文字幕在线国产精品| 国产女人18毛片水18精品| 亚洲男人天堂网站| 欧美视频免费在线观看| 国产精品草莓在线免费观看| 91九色蝌蚪国产| 欧洲成人免费视频| 欧美激情一级二级| 日韩美女在线播放| 欧美大尺度激情区在线播放| 日韩中文字幕免费| 国产亚洲激情视频在线| 日韩av网站大全| 97精品伊人久久久大香线蕉| 久久亚洲国产精品成人av秋霞| 色青青草原桃花久久综合| 亚洲xxx大片| 国产成人欧美在线观看| 亚洲理论在线a中文字幕| 亚洲福利视频网| 国产主播喷水一区二区| 中文字幕欧美视频在线| 欧美色播在线播放| 这里只有精品视频在线| 狠狠躁夜夜躁人人爽天天天天97| 亚洲激情在线观看| 97精品久久久中文字幕免费| 亚洲天堂男人的天堂| 欧美精品18videosex性欧美| 国产精品网址在线| 亚洲综合av影视| 国产成人亚洲综合91| 久久精品国产亚洲精品| www.日韩系列| 91九色国产社区在线观看| 精品久久香蕉国产线看观看gif| 亚洲成人黄色在线| 欧美午夜精品久久久久久久| 日韩美女免费视频| 成人免费午夜电影| 亚洲a区在线视频| 欧美电影院免费观看| 欧美性高潮床叫视频| 成人av.网址在线网站| 91精品在线一区| 国产欧美最新羞羞视频在线观看| www.欧美三级电影.com| 欧美性生活大片免费观看网址| 奇米四色中文综合久久| 色在人av网站天堂精品| 国产丝袜一区二区三区| 美女撒尿一区二区三区| 国产九九精品视频| 亚洲国产成人精品电影| 在线精品国产成人综合| 2020久久国产精品| 欧美激情喷水视频| 欧美大学生性色视频| 丰满岳妇乱一区二区三区| 亚洲欧美另类人妖| 精品久久久免费| 亚洲天堂成人在线| 97在线看免费观看视频在线观看| 成人在线观看视频网站| 成人美女免费网站视频| 国产精品久久久久久亚洲影视| 久久精品99无色码中文字幕| 北条麻妃久久精品| 98精品国产高清在线xxxx天堂| 久久精品99无色码中文字幕| 福利微拍一区二区| 午夜精品一区二区三区在线视频| 最近中文字幕2019免费| 成人欧美一区二区三区黑人| 亚洲欧美日韩一区二区三区在线| 欧美激情一区二区三级高清视频| 欧美一性一乱一交一视频| 久久久www成人免费精品| 大荫蒂欧美视频另类xxxx| 日韩第一页在线| 欧美一级大片视频| 欧美亚洲激情在线| 欧美精品在线极品| 国产综合视频在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美日韩在线第一页| 美女999久久久精品视频| 亚洲成人精品视频| 日韩av在线网址| 亚洲欧洲日韩国产| 亚洲精品电影在线| 亚洲性猛交xxxxwww| 国产日韩欧美在线看| 亚洲精品电影网| 少妇高潮久久77777| 2019av中文字幕| 国产综合福利在线| 国产精品视频专区| 久久影院免费观看| 国产精自产拍久久久久久| 热久久免费视频精品| 亚洲女人被黑人巨大进入al| 日韩电影中文字幕在线| 91人人爽人人爽人人精88v| 亚洲精品国产精品国自产观看浪潮| 亚洲大尺度美女在线| 久久精品视频在线观看| 大桥未久av一区二区三区| 亚洲自拍偷拍视频| 久久久午夜视频| 91高潮在线观看| 2019中文在线观看| 亚洲精品一区二区在线| 亚洲国产欧美日韩精品| 97香蕉久久夜色精品国产| 日日狠狠久久偷偷四色综合免费| 国产成人精品免费久久久久| 亚洲精品乱码久久久久久金桔影视| 亚洲少妇激情视频| 久久久久久久国产精品视频| 国产精品99久久久久久人| 久久频这里精品99香蕉| 成人有码在线视频| 成人av色在线观看| 日韩视频在线一区| 欧美国产第二页| 欧美成人一二三| 日韩中文字幕在线| 一区二区三区高清国产| 久久免费视频网| 久久99精品久久久久久噜噜| 久久香蕉国产线看观看网| 欧美中文在线视频| 国产精品久久久久久久电影| 久久国产精品久久精品| 中文字幕亚洲欧美在线| 欧美日本中文字幕| 日韩在线视频免费观看| 91精品国产综合久久香蕉922| 一区二区三区日韩在线| 国产精品69精品一区二区三区| 国产视频精品va久久久久久| 日韩成人在线电影网| 欧美伊久线香蕉线新在线| 亚洲精品国偷自产在线99热| 欧美激情伊人电影| 色婷婷亚洲mv天堂mv在影片| 国产欧美日韩91| 久久久久久久一区二区| 国产小视频91| 国产国语videosex另类| 欧美国产日韩二区| 丝袜一区二区三区| 欧美成人性生活| 欧美电影免费看|