国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

用組件beanutils,dbutils簡化JDBC操作

2024-07-21 02:14:59
字體:
來源:轉載
供稿:網友

    雖然現在出現了很多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了。

    未完待續……

,歡迎訪問網頁設計愛好者web開發。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 全椒县| 门头沟区| 龙胜| 开远市| 满洲里市| 湖北省| 清水河县| 沙河市| 南阳市| 新和县| 资兴市| 普安县| 鄂托克旗| 屯门区| 贵德县| 屏山县| 新宁县| 西乡县| 保康县| 长子县| 宜州市| 武川县| 巴楚县| 阿合奇县| 丹江口市| 定远县| 晴隆县| 漳浦县| 长沙市| 栾川县| 无棣县| 舞钢市| 观塘区| 弋阳县| 白城市| 三亚市| 忻城县| 苍山县| 曲松县| 和政县| 和政县|