<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 39,  comments - 44,  trackbacks - 0
    封裝數(shù)據(jù)庫(kù)操作,目的就是為了隱藏java.sql包內(nèi)的類,在編碼中去掉核心的數(shù)據(jù)庫(kù)操作代碼。以杜絕直接數(shù)據(jù)庫(kù)操作容易帶來(lái)的資源未釋放問(wèn)題。同時(shí)也減少了數(shù)據(jù)庫(kù)操作的編碼量。

      但是很多網(wǎng)友在封裝時(shí),卻喜歡返回結(jié)果集(ResultSet對(duì)象),那么這個(gè)封裝就沒(méi)有意義了。

      1. 又是直接操作核心數(shù)據(jù)庫(kù)類,跟封裝前幾乎沒(méi)什么變化。

      2. 結(jié)果集總是依賴于它使用的連接(Connection)對(duì)象。因此當(dāng)連接對(duì)象在方法內(nèi)被關(guān)閉后,你返回的ResultSet就沒(méi)有用了。

      如果真的要獲得查詢數(shù)據(jù)庫(kù)的結(jié)果集,就把結(jié)果集對(duì)象內(nèi)的所有數(shù)據(jù),轉(zhuǎn)儲(chǔ)到以Map為元素的List對(duì)象內(nèi)。

      當(dāng)然,這種方式,不能適應(yīng)大數(shù)據(jù)量的查詢,不過(guò)如果真的碰到大數(shù)據(jù)量的查詢,那用什么封裝都不好,還是得直接數(shù)據(jù)庫(kù)操作. :)))

      下面是簡(jiǎn)單的數(shù)據(jù)庫(kù)操作Javabean的代碼

      DbWrapper.java

      import java.sql.*;

      import java.util.*;

      public class DbWrapper

      {

      // 定義連接池對(duì)象為靜態(tài)變量,將一直存在,直到工作目錄關(guān)閉。

      private static DataSource ds = null;

      // 1.用連接池的方式獲得連接

      // 如果不是做多數(shù)據(jù)庫(kù)程序,推薦使用此方法

      // 相關(guān)內(nèi)容:在tomcat管理界面配置連接池

      public static Connection openConnection() throws Exception

      {

      // 只需要初始化1次

      if ( ds == null )

      {

      Context initContext = new InitialContext();

      Context envContext = (Context) initContext.lookup("java:/comp/env");

      DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");

      }

      return ds.getConnection();

      }

      // 2.用jdbc驅(qū)動(dòng)獲得連接

      // 相關(guān)內(nèi)容:JSP數(shù)據(jù)庫(kù)連接大全

      public static Connection openConnection(

      String driver,

      String url,

      String username,

      String password)

      throws Exception

      {

      Class.forName(driver).newInstance();

      return DriverManager.getConnection(url, username, password);

      }

      public static void closeConnection(Connection conn) throws Exception

      {

      if ( conn != null )

      {

      conn.close();

      }

      }

      public static int executeUpdate(String sql) throws Exception

      {

      int count = 0;

      Connection conn = null;

      Statement stmt = null;

      try

      {

      conn = openConnection();

      stmt = conn.createStatement();

      count = stmt.executeUpdate(sql);

      }

      catch ( Exception e )

      {

      throw e;

      }

      finally

      {

      closeConnection(conn);

      }

      return count;

      }

      public static List executeQuery(String sql) throws Exception

      {

      List list = new ArrayList();

      Connection conn = null;

      Statement stmt = null;

      ResultSet rs = null;

      try

      {

      conn = openConnection();

      stmt = conn.createStatement();

      rs = stmt.executeQuery(sql);

      ResultSetMetaData rsmd = rs.getMetaData();

      while ( rs.next() )

      {

      Map map = new HashMap();

      for ( int i = 1; i < = rsmd.getColumnCount(); i++ )

      {

      map.put(rsmd.getColumnName(i), rs.getObject(i));

      }

      list.add(map);

      } }

      catch ( Exception e )

      {

      e.printStackTrace();

      }

      finally

      {

      if ( rs != null ) rs.close();

      closeConnection(conn);

      }

      return list; }

      }

      使用示例:

      // 1.對(duì)于insert, update, delete語(yǔ)句int count = DbWrapper.executeUpdate(sql);

      // 2.對(duì)于selete語(yǔ)句

      java.util.List list = DbWrapper.executeQuery(sql);

      // 方法一:按名字取值,注意大小寫(xiě)是嚴(yán)格區(qū)分的

      for ( int i = 0; i < list.size(); i++ )

      {

      java.util.Map map = (java.util.Map)list.get(i);

      out.println(mag.get("column_name").toString());

      }

      // 方法二:遍歷取值

      for ( int i = 0; i < list.size(); i++ )

      {

      java.util.Map map = (java.util.Map)list.get(i);

      for (java.util.Iterator it = map.keySet().iterator(); it.hasNext();)

      {

      String column_name = it.next().toString()); // 取值時(shí)注意null判斷

      out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString());

      }

      }

    posted on 2008-05-07 18:52 礦礦 閱讀(134) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲欧洲日产韩国在线| 亚洲国产成人无码AV在线| 四虎在线最新永久免费| 亚洲色偷精品一区二区三区| 免费h黄肉动漫在线观看| 成全动漫视频在线观看免费高清版下载| 亚洲va在线va天堂va888www| www.999精品视频观看免费| 一区二区三区免费在线视频 | 内射干少妇亚洲69XXX| 成人毛片18岁女人毛片免费看| 黄色一级视频免费| 亚洲人成电影在在线观看网色| 免费的一级黄色片| 免费黄色电影在线观看| 亚洲av无码av在线播放| 无码欧精品亚洲日韩一区| 国产免费观看黄AV片| 99久久久国产精品免费牛牛四川 | 日韩在线视频播放免费视频完整版| 亚洲AV日韩AV高潮无码专区| 爽爽日本在线视频免费| 无码人妻精品中文字幕免费 | 毛色毛片免费观看| 天堂在线免费观看| 亚洲AV无码一区二区三区电影| 久久久影院亚洲精品| 日本中文一区二区三区亚洲| 国产男女爽爽爽爽爽免费视频| 久久最新免费视频| 亚洲成av人片在www鸭子| 亚洲高清无在码在线无弹窗| 亚洲性日韩精品国产一区二区| 午夜色a大片在线观看免费| 久久99国产综合精品免费| 少妇亚洲免费精品| 久久久久亚洲国产AV麻豆| 亚洲国产精品综合久久20| 亚洲午夜久久影院| 亚洲av永久无码精品秋霞电影影院| 亚洲高清成人一区二区三区 |