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

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

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

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    用組件beanutils,dbutils簡化JDBC操作

    Posted on 2007-12-28 14:33 semovy 閱讀(253) 評論(0)  編輯  收藏 所屬分類: struts

        雖然現在出現了很多ORM框架,可是還是有很多朋友也許還在使用JDBC,就像我現在一樣,除了學習的時候在使用Hibernate、Spring類似這些優秀的框架,工作時一直都在使用JDBC。本文就簡單介紹一下利用Jakarta Commons旗下beanutils、dbutils簡化JDBC數據庫操作,以拋磚引玉,希望對像我一樣在使用JDBC的朋友有所幫助。

        下面就分兩部分簡單介紹beanutils、dbutils在基于JDBC API數據庫存取操作中的運用。第一部分顯介紹beanutils在JDBC數據庫存取操作中的運用,第二部分介紹dbutils在JDBC數據庫存取操作中的運用,最后看看他們的優缺點,談談本人在項目運用過程中對他們的一點心得體會,僅供參考,其中有錯誤的地方希望大蝦不吝賜教,大家多多交流共同進步。

        一、Jakarta Commons beanutils

        Beanutils是操作Bean的銳利武器,其提過的BeanUtils工具類可以簡單方便的讀取或設置Bean的屬性,利用Dyna系列,還可以在運行期創建Bean,符合懶人的習慣,正如LazyDynaBean,LazyDynaClass一樣,呵呵。這些用法已經有很多文章提及,也可以參考apache的官方文檔。

        對于直接利用JDBC API訪問數據庫時(這里針對的是返回結果集ResultSet的查詢select),大多數都是采用兩種方式,一種是取出返回的結果集的數據存于Map中,另一種方式是Bean里。針對第二種方式,Beanutils里提供了ResultSetDynaClass結合DynaBean以及RowSetDynaClass結合DynaBean來簡化操作。下面用以個簡單的例子展示一下beanutils的這兩個類在JDBC數據庫操作中的運用。

        請在本機建立數據庫publish,我用的是MySQL,在publish數據庫中建立表book,腳本如下:

    CREATE TABLE book(

      id int(11) NOT NULL auto_increment,

      title varchar(50) character set latin1 NOT NULL,

      authors varchar(50) character set latin1 default NULL,

      PRIMARY KEY  (id)


    )

        然后用你喜歡的編輯器建立一個類BeanutilsJDBCTest,我們先用ResultSetDynaClass來處理,然后再用RowSetDynaClass來實現同樣的類,之后看看他們之間有什么不同,用ResultSetDynaClass處理的源代碼如下所示:

        然后用你喜歡的編輯器建立一個類BeanutilsJDBCTest,我們先用ResultSetDynaClass來處理,然后再用RowSetDynaClass來實現同樣的類,之后看看他們之間有什么不同,用ResultSetDynaClass處理的源代碼如下所示:

    package cn.qtone.test;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.Statement;

    import java.util.Iterator;

    import org.apache.commons.beanutils.DynaBean;

    import org.apache.commons.beanutils.PropertyUtils;

    import org.apache.commons.beanutils.ResultSetDynaClass;

    public class BeanutilsJDBCTest{

           public static void main(String[] args) {

                  Connection con = null;

                  Statement st = null;

                  ResultSet rs = null;

                  try {

                         Class.forName("com.mysql.jdbc.Driver");

                         String url = "jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";

                         con = DriverManager.getConnection(url, "root", "hyys");

                         st = con.createStatement();

                         rs = st.executeQuery("select * from book");

                         ResultSetDynaClass rsDynaClass = new ResultSetDynaClass(rs);

                         Iterator itr = rsDynaClass.iterator();

                         System.out.println("title-------------authors");

                         while (itr.hasNext()) {

                                DynaBean dBean = (DynaBean) itr.next();

                                System.out.println(PropertyUtils.getSimpleProperty(dBean,"title")

                                              + "-------------"+ PropertyUtils.getSimpleProperty(dBean, "authors"));

                         }


                  } catch (Exception e) {

                         e.printStackTrace();


                  } finally {

                         try {

                                if (rs != null) {

                                       rs.close();

                                }

                                if (st != null) {

                                       st.close();

                                }

                                if (con != null) {

                                       con.close();

                                }


                         } catch (Exception e) {

                                e.printStackTrace();

                         }

                  }

           }

    }

        用RowSetDynaClass處理的源代碼如下所示:

    package cn.qtone.test;

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.Statement;

    import java.util.Iterator;

    import java.util.List;

    import org.apache.commons.beanutils.DynaBean;

    import org.apache.commons.beanutils.PropertyUtils;

    import org.apache.commons.beanutils.RowSetDynaClass;

    public class BeanutilsJDBCTest{

           public static void main(String[] args) {

                  List rsDynaClass = rsTest();

                  System.out.println("title ------------- authors ");

                  Iterator itr = rsDynaClass.iterator();

                  while (itr.hasNext()) {

                         DynaBean dBean = (DynaBean) itr.next();

                         try {

                                System.out.println(PropertyUtils.getSimpleProperty(dBean,"name")

                                              + "-------------"+ PropertyUtils.getSimpleProperty(dBean, "mobile"));

                         } catch (Exception e) {

                                // TODO 自動生成 catch 塊

                                e.printStackTrace();

                        }


                  }


           }


           private static List rsTest() {

                  Connection con = null;

                  Statement st = null;

                  ResultSet rs = null;

                  try {

                         Class.forName("com.mysql.jdbc.Driver");

                         String url = "jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";

                         con = DriverManager.getConnection(url, "root", "hyys");

                         st = con.createStatement();

                         rs = st.executeQuery("select * from book");

                         RowSetDynaClass rsdc = new RowSetDynaClass(rs);

                         return rsdc.getRows();

                  } catch (Exception e) {

                         e.printStackTrace();

                  } finally {

                         try {

                                if (rs != null) {

                                       rs.close();

                                }

                                if (st != null) {

                                       st.close();

                                }

                                if (con != null) {

                                       con.close();

                                }

                         } catch (Exception e) {

                                e.printStackTrace();

                         }

                  }


                  return null;

           }

    }

        這兩個方法輸出的結果應該是一樣的。但是很顯然第二種方式比第一種方式要好,它把數據訪問部分抽取出來放到一個方法中,顯得簡單清晰。

        其實在利用ResultSetDynaClass時,必須在ResultSet等數據庫資源關閉之前,處理好那些數據,你不能在資源關閉之后使用DynaBean,否則就會拋出異常,異常就是說不能在ResultSet之后存取數據(具體的異常名我也忘了),當然你也可以采用以前的方式一個一個的把數據放到Map里,如果你一定要那樣做,建議還是別用Beanutils,因為這沒帶給你什么好處。總之利用ResultSetDynaClass你的程序的擴展性非常部好。

        從第二中方式可以看出,利用RowSetDynaClass可以很好的解決上述ResultSetDynaClass遇到的問題,RowSetDynaClass的getRows()方法,把每一行封裝在一個DynaBean對象里,然后,把說有的行放到一個List里,之后你就可以對返回的List里的每一個DynaBean進行處理,此外對于DynaBean你還可以采用標準的get/set方式處理,當然你也可以用PropertyUtils. getSimpleProperty(Object bean, String name)進行處理。

        從上面的分析中,你應該可以決定你應該使用ResultSetDynaClass還是RowSetDynaClass了。

        雖然現在出現了很多ORM框架,可是還是有很多朋友也許還在使用JDBC,就像我現在一樣,除了學習的時候在使用Hibernate、Spring類似這些優秀的框架,工作時一直都在使用JDBC。本文就簡單介紹一下利用Jakarta Commons旗下beanutils、dbutils簡化JDBC數據庫操作,以拋磚引玉,希望對像我一樣在使用JDBC的朋友有所幫助。

        下面就分兩部分簡單介紹beanutils、dbutils在基于JDBC API數據庫存取操作中的運用。第一部分顯介紹beanutils在JDBC數據庫存取操作中的運用,第二部分介紹dbutils在JDBC數據庫存取操作中的運用,最后看看他們的優缺點,談談本人在項目運用過程中對他們的一點心得體會,僅供參考,其中有錯誤的地方希望大蝦不吝賜教,大家多多交流共同進步。

        一、Jakarta Commons beanutils

        Beanutils是操作Bean的銳利武器,其提過的BeanUtils工具類可以簡單方便的讀取或設置Bean的屬性,利用Dyna系列,還可以在運行期創建Bean,符合懶人的習慣,正如LazyDynaBean,LazyDynaClass一樣,呵呵。這些用法已經有很多文章提及,也可以參考apache的官方文檔。

        對于直接利用JDBC API訪問數據庫時(這里針對的是返回結果集ResultSet的查詢select),大多數都是采用兩種方式,一種是取出返回的結果集的數據存于Map中,另一種方式是Bean里。針對第二種方式,Beanutils里提供了ResultSetDynaClass結合DynaBean以及RowSetDynaClass結合DynaBean來簡化操作。下面用以個簡單的例子展示一下beanutils的這兩個類在JDBC數據庫操作中的運用。

        請在本機建立數據庫publish,我用的是MySQL,在publish數據庫中建立表book,腳本如下:

    CREATE TABLE book(
      id int(11) NOT NULL auto_increment,
      title varchar(50) character set latin1 NOT NULL,
      authors varchar(50) character set latin1 default NULL,
      PRIMARY KEY  (id)
    )

        然后用你喜歡的編輯器建立一個類BeanutilsJDBCTest,我們先用ResultSetDynaClass來處理,然后再用RowSetDynaClass來實現同樣的類,之后看看他們之間有什么不同,用ResultSetDynaClass處理的源代碼如下所示:

        然后用你喜歡的編輯器建立一個類BeanutilsJDBCTest,我們先用ResultSetDynaClass來處理,然后再用RowSetDynaClass來實現同樣的類,之后看看他們之間有什么不同,用ResultSetDynaClass處理的源代碼如下所示:

    package cn.qtone.test;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Iterator;
    import org.apache.commons.beanutils.DynaBean;
    import org.apache.commons.beanutils.PropertyUtils;
    import org.apache.commons.beanutils.ResultSetDynaClass;
    public class BeanutilsJDBCTest{
           public static void main(String[] args) {
                  Connection con = null;
                  Statement st = null;
                  ResultSet rs = null;
                  try {
                         Class.forName("com.mysql.jdbc.Driver");
                         String url = "jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";
                         con = DriverManager.getConnection(url, "root", "hyys");
                         st = con.createStatement();
                         rs = st.executeQuery("select * from book");
                         ResultSetDynaClass rsDynaClass = new ResultSetDynaClass(rs);
                         Iterator itr = rsDynaClass.iterator();
                         System.out.println("title-------------authors");
                         while (itr.hasNext()) {
                                DynaBean dBean = (DynaBean) itr.next();
                                System.out.println(PropertyUtils.getSimpleProperty(dBean,"title")
                                              + "-------------"+ PropertyUtils.getSimpleProperty(dBean, "authors"));
                         }
                  } catch (Exception e) {
                         e.printStackTrace();
                  } finally {
                         try {
                                if (rs != null) {
                                       rs.close();
                                }
                                if (st != null) {
                                       st.close();
                                }
                                if (con != null) {
                                       con.close();
                                }
                         } catch (Exception e) {
                                e.printStackTrace();
                         }
                  }
           }
    }

        用RowSetDynaClass處理的源代碼如下所示:

    package cn.qtone.test;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Iterator;
    import java.util.List;
    import org.apache.commons.beanutils.DynaBean;
    import org.apache.commons.beanutils.PropertyUtils;
    import org.apache.commons.beanutils.RowSetDynaClass;
    public class BeanutilsJDBCTest{
           public static void main(String[] args) {
                  List rsDynaClass = rsTest();
                  System.out.println("title ------------- authors ");
                  Iterator itr = rsDynaClass.iterator();
                  while (itr.hasNext()) {
                         DynaBean dBean = (DynaBean) itr.next();
                         try {
                                System.out.println(PropertyUtils.getSimpleProperty(dBean,"name")
                                              + "-------------"+ PropertyUtils.getSimpleProperty(dBean, "mobile"));
                         } catch (Exception e) {
                                // TODO 自動生成 catch 塊
                                e.printStackTrace();
                         }
                  }
           }
           private static List rsTest() {
                  Connection con = null;
                  Statement st = null;
                  ResultSet rs = null;
                  try {
                         Class.forName("com.mysql.jdbc.Driver");
                         String url = "jdbc:mysql://127.0.0.1:3306/publish?useUnicode=true&characterEncoding=GBK";
                         con = DriverManager.getConnection(url, "root", "hyys");
                         st = con.createStatement();
                         rs = st.executeQuery("select * from book");
                         RowSetDynaClass rsdc = new RowSetDynaClass(rs);
                         return rsdc.getRows();
                  } catch (Exception e) {
                         e.printStackTrace();
                  } finally {
                         try {
                                if (rs != null) {
                                       rs.close();
                                }
                                if (st != null) {
                                       st.close();
                                }
                                if (con != null) {
                                       con.close();
                                }
                         } catch (Exception e) {
                                e.printStackTrace();
                         }
                  }
                  return null;
           }
    }

        這兩個方法輸出的結果應該是一樣的。但是很顯然第二種方式比第一種方式要好,它把數據訪問部分抽取出來放到一個方法中,顯得簡單清晰。

        其實在利用ResultSetDynaClass時,必須在ResultSet等數據庫資源關閉之前,處理好那些數據,你不能在資源關閉之后使用DynaBean,否則就會拋出異常,異常就是說不能在ResultSet之后存取數據(具體的異常名我也忘了),當然你也可以采用以前的方式一個一個的把數據放到Map里,如果你一定要那樣做,建議還是別用Beanutils,因為這沒帶給你什么好處。總之利用ResultSetDynaClass你的程序的擴展性非常部好。

        從第二中方式可以看出,利用RowSetDynaClass可以很好的解決上述ResultSetDynaClass遇到的問題,RowSetDynaClass的getRows()方法,把每一行封裝在一個DynaBean對象里,然后,把說有的行放到一個List里,之后你就可以對返回的List里的每一個DynaBean進行處理,此外對于DynaBean你還可以采用標準的get/set方式處理,當然你也可以用PropertyUtils. getSimpleProperty(Object bean, String name)進行處理。

        從上面的分析中,你應該可以決定你應該使用ResultSetDynaClass還是RowSetDynaClass了。

        未完待續……

    主站蜘蛛池模板: 亚洲va中文字幕无码| 扒开双腿猛进入爽爽免费视频 | 国产成人免费网站| 亚洲AV人无码激艳猛片| 免费看少妇高潮成人片| 亚洲中文久久精品无码ww16| 久久国产精品免费一区| 精品久久久久久亚洲| a色毛片免费视频| 久久久久亚洲精品美女| 91福利免费视频| 亚洲乱码卡一卡二卡三| 免费精品一区二区三区在线观看| 亚洲熟妇AV一区二区三区浪潮| 日本免费网站在线观看| 黄色免费网址大全| 在线日韩日本国产亚洲| 久久精品一区二区免费看| 亚洲国产美女在线观看| 日韩免费无码一区二区视频| 老司机精品视频免费| 久久被窝电影亚洲爽爽爽| 18未年禁止免费观看| 亚洲精品国产综合久久久久紧| 亚洲成av人在片观看| 在线观看片免费人成视频播放| 久久亚洲美女精品国产精品 | 国内免费高清在线观看| 国产亚洲精品免费| 综合亚洲伊人午夜网| 最好看的中文字幕2019免费| 亚洲精品美女久久7777777| 亚洲综合精品网站| 最近免费最新高清中文字幕韩国| 亚洲午夜福利在线视频| 久久青青草原亚洲av无码| 亚洲香蕉免费有线视频| 亚洲日韩在线中文字幕综合| 久久久久亚洲AV成人无码| 噜噜嘿在线视频免费观看| 成人免费av一区二区三区|