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

首頁 > 學院 > 開發設計 > 正文

新手上路:JDBC初級應用實例(一)

2019-11-18 12:38:56
字體:
來源:轉載
供稿:網友

  在了解JDBC基礎知識以后,我們先來寫一個數據庫操作的類(Bean)以后我們會在這個類的基礎上,隨著介紹的深入不斷提供優化的方案.要把一個數據庫操作獨立到一個類(Bean)中,至少要考慮以下幾個方面:
  
  1.對于不同層次的應用,應該有不同的得到連結的方法,假如得到連結的方法要隨著應用層次的不同而改變,我們就應該把他獨立成一個專門的類中,而把在任何應用層次中都通用的處理方法封裝到一個(類)Bean中.
  
  2.既然考慮到既作為javaBean使用又可以用為一個普通類調用,要考慮到javaBean的規范和普通類的靈活性.
  
  3.對于特定的數據庫操作不應封裝到共性的(類)Bean中,而應該成為它的擴展類.
  
  以上幾點是充分考慮JAVA的面象對象的思想,經過深入的抽象形成的層次,下面我們就按這個思想來設計:
  
  一:定義一個用于連結的Bean,以后假如要在不同的應用中,如可以在J2EE中從DataSource中得到連結,或從普通的連結池中得到連結,以及直接從DriverManager中得到
  
  連結,只需修改本類中的得到連結的實現方法.
  
  package com.imnamg.axman.beans;
  import java.sql.*;
  import ..................
  public class ConnectionFactory{
  PRotected Connection conn;
  ConnectionFactory() throws SQLException
  {  //構造方法中生成連結
  //無論是從DataSource還是直接從DriverManager中取得連結.
  //先初始化環境,然后取得連結,本例作為初級應用,從DriverManager中取得連結,因為是封裝類,所以要把異常拋給調用它的程序處理而不要用try{}catch(){}塊自選處理了.
  //因為要給業務方法的類繼續,而又不能給調用都訪問,所以conn聲明為protected
  conn =   DriverManager.getConnection(url,user,passwd);
  }
  
  /**
  在多線程編程中,很多時候有可能在多個線程體中得到同一連結的引用,但假如在一個線程中關閉了連結,則另一個得到相同引用的線程就無法操作了,所以我們應該加一個重新建立連結的輔助方法,有人問為什么既然有這個輔助方法不直接調用這個輔助而要在構造方法中生成連結?因為這樣可以增加效率,假如在構造時不能生成連結則就不能生成這個對象了,沒有必要在對象生成后再測試能不能生成連結.
  */
  public void makeConnection(){
  //此處的代碼同構造方法,無論以后假如實現連結,都將構造方法的代碼復制到此處.
  conn =   DriverManager.getConnection(url,user,passwd);
  }
  }
  
  這個類就封裝到這里,當然你可以在這兒增加業務方法,但假如要修改連結的實現,整個類都要重新編譯,因為業務方法和應用層次無關,代碼一經生成不易變動,所以獨立封裝.以下我們實現業務方法:
  
  package com.imnamg.axman.beans;
  import java.sql.*;
  import ..................
  public class DBOperater extends ConnectionFactory{
  //private Statement stmt;
  //private ResultSet rs;
  //為什么要注釋成員變量stmt和rs,基礎部分已經說過,假如聲明為成員變量,在關閉conn時可以顯示地先關閉rs和stmt,別的沒有任何好處,而顯示關閉只是說明你編程風格好,但綜合考慮,我們要生成多個stmt或不是類型的stmt就不能聲明為成員方法,否則引用同一對象,所以我們要業務方法中生成stmt對象.不僅可以同時處理多個結果集,還可以提高性能和靈活性.
  
  public ResultSet executeQuery(String sql) throws SQLException{
  if(conn==null conn.isClosed())
  makeConnection();
  Statement stmt = con.createStatement(
  ResultSet.TYPE_SCROLL_INSENSITIVE,
  ResultSet.CONCUR_READ_ONLY);
  //對于一般的查詢操作,我們只要生成一個可流動的結果集就行了.
  //而對于在查詢時要更新記錄,我們用另一個業務方法來處理,這樣,這樣可以在普通查詢時節省回滾空間.
  ResultSet rs = stmt.executeQuery(sql);
  return rs;
  }
  
  public ResultSet executeUpdatabledQuery(String sql) throws SQLException{
  if (con == null con.isClosed())
  makeConnection();
  Statement stmt = con.createStatement(
  ResultSet.TYPE_SCROLL_INSENSITIVE,
  ResultSet.CONCUR_UPDATABLED);
  //可更新的結果結要更大的回滾空間,普通查詢時不要調用這個方法
  ResultSet rs = stmt.executeQuery(sql);
  return rs;
  }
  
  /**
  基于同上的原因,在執行更新操作是我們根本不要任何回滾空間,所以建立一個基本類型的stmt,實現如下
  */
  
  public int executeUpdate(String sql) throws SQLException{
  if (con == null con.isClosed())
  makeConnection();
  Statement stmt = con.createStatement();
  //這個stmt在執行更新操作時更加節省內存,永遠記住,能節省的時候要節省每一個字節的內存,雖然硬件設備可能會有很大的物理內存,但內存是給用戶用的而不是給程序員用的(!!!!!!!!!!!!!!!!!!)
  int s = stmt.executeUpdate(sql);
  return s;
  }
  
  //以上實現了常用功能,還有兩個通用的功能也是/"共性/"的,我們一起在這個封裝類中實現:
  public PreparedStatement getPreparedStmt(String sql) throws SQLException{
  if (con == null con.isClosed())
  makeConnection();
  PreparedStatement ps = con.prepareStatement(sql);
  return ps;
  }
  public CallableStatement getCallableStmt(String sql) throws SQLException{
  if (con == null con.isClosed())
  makeConnection();
  PreparedStatement ps = con.prepareCall(sql);
  return ps;
  }
  
  //記住:對于封裝類而言預編譯語句和存儲過程調用應該從連結中返PreparedStatement和CallableStatement供調用者處理而不是返回它們的處理結果.也就是說封裝類只封裝了它們的連結過程.最后再次聲明,一定要有一個close()方法供調用者調用,而且告訴調用者無論假如要調用這個方法:
  
  public void close() throws SQLException{
  if(conn != null && !conn.isClosed())
  conn.close();
  }
  //這個方法最好放在ConnectionFactory中,這樣可以直接調用來只測試連結.而不用再調用子類來關閉
  }
  
  OK,我們已經實現了數據庫常用操作的封裝,注重這些業務方法都是把異常拋給調用者而沒有用try...catch來處理,你假如在這里處理了那么調用者則無法調試了.對于特定的數據庫的非凡操作,不要封裝到此類中,可以再從這個類繼續,或直接從ConnectionFactory類繼續,當然最好是從這個業務類中繼續,這樣不僅可以調用非凡方法也可以調用共性的業務方法,興一個例子,我在應用Oracle時要把xml文件直接存到數據數和把數據直接讀取為XML文件,那么這兩個方法只對Oracle才用到,所以:
  
  package com.inmsg.axman.beans;
  
  import java.sql.*;
  import oracle.xml.sql.query.OracleXMLQuery;
  import oracle.xml.sql.dml.OracleXMLSave;
  
  public class OracleDBOperater extends DBOperater{
  public OracleXMLQuery getOXQuery(String sql,String table) throws Exception
  {
  OracleXMLQuery qry = new OracleXMLQuery(con,sql);
  qry.setRowsetTag(table);
  qry.setRowTag(/"RECORD/");
  return qry;
  }
  public int insertXML(String path,String table) throws Exception
  {
  OracleXMLSave sav = new OracleXMLSave(con,table);
  URL url = sav.createURL(path);
  sav.setRowTag(/"RECORD/");
  int x = sav.insertXML(url);
  sav.close();
  return x;
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成av人片在线观看香蕉| 成人激情视频在线观看| 亚洲国产精品成人精品| 精品久久久久久中文字幕一区奶水| 亚洲综合日韩中文字幕v在线| 国产精品久久综合av爱欲tv| 久久久视频精品| 日日狠狠久久偷偷四色综合免费| 日韩在线视频观看正片免费网站| 亚洲激情在线视频| 国产一区二区日韩精品欧美精品| 色综合久久中文字幕综合网小说| 日韩免费不卡av| 这里精品视频免费| 亚洲女人被黑人巨大进入| 日韩国产高清视频在线| 亚洲大尺度美女在线| 国产999在线| 狠狠色香婷婷久久亚洲精品| 亚洲男人的天堂网站| 久久中文久久字幕| 亚洲男人天天操| 91日本在线观看| 国产精品久久久久久久久久三级| 成人激情在线播放| 日本不卡免费高清视频| 91精品视频专区| 成人观看高清在线观看免费| 色综合影院在线| 久久精品久久久久久| 久久人91精品久久久久久不卡| 亚洲va久久久噜噜噜久久天堂| 国产精品国产福利国产秒拍| 亚洲一区美女视频在线观看免费| 青青草原成人在线视频| 亚洲jizzjizz日本少妇| 国产精品99蜜臀久久不卡二区| 亚洲日韩第一页| 欧美中文在线观看国产| 91精品视频免费观看| 欧美精品激情在线观看| 亚洲女人被黑人巨大进入| 欧美精品一二区| 久久全国免费视频| 激情av一区二区| 色综合亚洲精品激情狠狠| 黄网站色欧美视频| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲一区精品电影| 亚洲第一精品夜夜躁人人躁| 久久夜色精品国产亚洲aⅴ| www.日韩系列| 亚洲国产一区二区三区在线观看| 国产精品青草久久久久福利99| 亚洲欧美另类人妖| 国产精品久久久av久久久| 91精品视频在线看| 成人日韩av在线| 欧美自拍大量在线观看| 日韩精品视频在线| 欧美成人亚洲成人日韩成人| 国产91热爆ts人妖在线| 欧美三级欧美成人高清www| 欧美电影免费看| 国产欧美精品久久久| 懂色av影视一区二区三区| 久久99精品国产99久久6尤物| 欧美成人在线网站| 久久精视频免费在线久久完整在线看| 97视频在线观看网址| 日韩av电影手机在线| 两个人的视频www国产精品| 91po在线观看91精品国产性色| 性欧美办公室18xxxxhd| 国产精品成人久久久久| 川上优av一区二区线观看| 中文字幕亚洲色图| 91久久久久久久久久久| 日韩精品免费在线视频观看| 国产精品视频在线观看| 97超碰蝌蚪网人人做人人爽| 亚洲第一页中文字幕| 日韩电影在线观看免费| 国产91成人在在线播放| 亚洲国产精品va在线| 欧美日韩国内自拍| 亚洲欧美日韩精品| 超碰日本道色综合久久综合| 日本最新高清不卡中文字幕| 2018中文字幕一区二区三区| 成人午夜高潮视频| 国产精品久久久久久av| 国产精品久久久久不卡| 日韩欧美在线观看视频| 国内精品久久久久影院 日本资源| 欧美黑人性猛交| 国产成人精品综合久久久| 成人av资源在线播放| 欧美亚州一区二区三区| 色偷偷av一区二区三区乱| 国产成人精品综合久久久| 成人av.网址在线网站| 日本精品va在线观看| www.国产精品一二区| 亚洲3p在线观看| 丁香五六月婷婷久久激情| 欧美国产乱视频| 国产精品久久77777| 日韩黄在线观看| 亚洲福利视频网站| 成人欧美一区二区三区黑人| 操人视频在线观看欧美| 亚洲免费视频观看| 91久久国产精品91久久性色| 久久久免费观看视频| 日韩一区视频在线| 69久久夜色精品国产69| 欧美在线日韩在线| 久久久亚洲成人| 久久久av亚洲男天堂| 欧美性生交大片免费| 日韩在线欧美在线| 成人一区二区电影| 欧美多人爱爱视频网站| 亚洲综合在线小说| 亚洲欧洲成视频免费观看| 69久久夜色精品国产7777| 国外成人在线直播| 午夜精品一区二区三区av| 国语自产精品视频在免费| 一区二区欧美亚洲| 亚洲r级在线观看| 国产成人精品在线| 操人视频在线观看欧美| 久久久av免费| 亚洲三级 欧美三级| 欧美性生交大片免费| 91精品国产91久久久久久| 欧美做爰性生交视频| 日韩免费在线观看视频| 热久久美女精品天天吊色| 91免费观看网站| zzijzzij亚洲日本成熟少妇| 91成人天堂久久成人| 国产视频精品在线| 91免费版网站入口| www.日韩系列| 欧美激情亚洲另类| 久久久久久国产三级电影| 久久777国产线看观看精品| 国产精品夜间视频香蕉| 国产精品视频yy9099| 亚洲国产精品人久久电影| 欧美日韩激情小视频| 日韩中文在线中文网三级| 国产精品一香蕉国产线看观看| 国产精品v片在线观看不卡| 伊人久久大香线蕉av一区二区| 国产在线播放91| 亚洲人成77777在线观看网| 日韩精品在线观看一区| 亚洲综合国产精品| 国模视频一区二区| 色综合久久久888|