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

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

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

    隨筆 - 251  文章 - 504  trackbacks - 0
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

    留言簿(14)

    隨筆分類

    收藏夾

    My Favorite Web Sites

    名Bloger

    非著名Bloger

    搜索

    •  

    積分與排名

    • 積分 - 202396
    • 排名 - 285

    最新評論

    下面會通過一個獲得數據源的例子來比較下傳統編碼模式和IoC編碼模式的不同。首先,在傳統編碼方式下,我們可能這樣獲得數據源并顯示結果:
    package?com.lnic.ioc;

    import?javax.sql.DataSource;
    import?java.sql.Connection;
    import?java.sql.Statement;
    import?java.sql.ResultSet;
    import?java.sql.SQLException;
    import?org.apache.commons.dbcp.BasicDataSource;

    public?class?BasicDataSourceExample?{

    ????
    public?static?void?main(String[]?args)?{
    ????????DataSource?dataSource?
    =?setupDataSource();

    ????????
    //?創建JDBC數據源
    ????????Connection?conn?=?null;
    ????????Statement?stmt?
    =?null;
    ????????ResultSet?rset?
    =?null;

    ????????
    try?{
    ????????????
    ????????????conn?
    =?dataSource.getConnection();
    ????????????stmt?
    =?conn.createStatement();
    ????????????rset?
    =?stmt.executeQuery("select?*?from?user");
    ????????????System.out.println(
    "Basic?DataSource?executing?results:");
    ????????????
    int?numcols?=?rset.getMetaData().getColumnCount();
    ????????????
    while?(rset.next())?{
    ????????????????
    for?(int?i?=?1;?i?<=?numcols;?i++)?{
    ????????????????????System.out.print(
    "\t"?+?rset.getString(i));
    ????????????????}

    ????????????????System.out.println(
    "");
    ????????????}

    ????????}
    ?catch?(SQLException?e)?{
    ????????????e.printStackTrace();
    ????????}
    ?finally?{
    ????????????
    try?{
    ????????????????rset.close();
    ????????????}
    ?catch?(Exception?e)?{
    ????????????}

    ????????????
    try?{
    ????????????????stmt.close();
    ????????????}
    ?catch?(Exception?e)?{
    ????????????}

    ????????????
    try?{
    ????????????????conn.close();
    ????????????}
    ?catch?(Exception?e)?{
    ????????????}

    ????????}

    ????}


    ????
    //?創建數據源
    ????public?static?DataSource?setupDataSource()?{
    ????????BasicDataSource?ds?
    =?new?BasicDataSource();
    ????????ds.setDriverClassName(
    "com.mysql.jdbc.Driver");
    ????????ds.setUsername(
    "root");
    ????????ds.setPassword(
    "131421");
    ????????ds.setUrl(
    "jdbc:mysql://localhost:3306/test");
    ????????
    return?ds;
    ????}


    ????
    //?提示數據源狀態
    ????public?static?void?printDataSourceStats(DataSource?ds)?throws?SQLException?{
    ????????BasicDataSource?bds?
    =?(BasicDataSource)?ds;
    ????????System.out.println(
    "NumActive:?"?+?bds.getNumActive());
    ????????System.out.println(
    "NumIdle:?"?+?bds.getNumIdle());
    ????}


    ????
    //?關閉數據源
    ????public?static?void?shutdownDataSource(DataSource?ds)?throws?SQLException?{
    ????????BasicDataSource?bds?
    =?(BasicDataSource)?ds;
    ????????bds.close();
    ????}

    }

    這個累的測試結果顯示:
    Basic DataSource executing results:
    ?123?matthew?YunNanUniversity
    ?1?lidexian?YunNanUniversity
    ?2?zhangzili?HunanUniversity

    而在Spring 的IoC容器的幫助下我們的編碼會更簡單和靈活。首先,定義個Spring的配置文件:applicationContext.xml。在這個配置文件中,我們配置了三個bean組件,代表不同的數據庫數據源。然后,通過配置jdbcTemplate來啟用需要的具體數據庫數據源。如下:我們采用的MySql數據源。
    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
    ????
    <bean?id="oracle_dataSource"?class="org.apache.commons.dbcp.BasicDataSource"?destroy-method="close">
    ????????
    <property?name="driverClassName"?value="oracle.jdbc.driver.OracleDriver"?/>
    ????????
    <property?name="url"?value="jdbc:oracle:thin:@localhost:1521:cyberdb"?/>
    ????????
    <property?name="username"?value="scott"?/>
    ????????
    <property?name="password"?value="tiger"?/>
    ????
    </bean>
    ????
    ????
    ????
    ????
    <bean?id="mysql_dataSource"?class="org.apache.commons.dbcp.BasicDataSource"?destroy-method="close">
    ????????
    <property?name="driverClassName"?value="com.mysql.jdbc.Driver"?/>
    ????????
    <property?name="url"?value="jdbc:mysql://localhost:3306/test"?/>
    ????????
    <property?name="username"?value="root"?/>
    ????????
    <property?name="password"?value="131421"?/>
    ????
    </bean>
    ????
    ????
    <bean?id="linux_oracle_dataSource"?class="org.apache.commons.dbcp.BasicDataSource"?destroy-method="close">
    ????????
    <property?name="driverClassName"?value="oracle.jdbc.driver.OracleDriver"?/>
    ????????
    <property?name="url"?value="jdbc:oracle:thin:@192.168.0.3:1521:linuxdb"?/>
    ????????
    <property?name="username"?value="scott"?/>
    ????????
    <property?name="password"?value="tiger"?/>
    ????
    </bean>

    ????
    <bean?id="jdbcTemplate"?class="org.springframework.jdbc.core.JdbcTemplate"?lazy-init="true">
    ????????
    <property?name="dataSource">
    ????????????
    <ref?local="mysql_dataSource"?/>
    ????????
    </property>
    ????
    </bean>

    ????
    </beans>


    然后,如下在代碼中通過載入Spring的配置文件,并初始化bean組件:jdbcTemplate得到數據源,并完成數據查詢。可以看出比傳統的方法簡單和靈活多了,只需要簡單配置即可完成。
    package?com.lnic.ioc;

    import?java.sql.ResultSet;
    import?java.sql.SQLException;
    import?java.util.ArrayList;
    import?java.util.List;

    import?org.springframework.context.ApplicationContext;
    import?org.springframework.context.support.ClassPathXmlApplicationContext;
    import?org.springframework.jdbc.core.JdbcTemplate;
    import?org.springframework.jdbc.core.RowCallbackHandler;

    public?class?IocDataSourceExample?{
    ????
    public?static?void?main(String[]?args)?{
    ????????ApplicationContext?ctx?
    =?new?ClassPathXmlApplicationContext(
    ????????????????
    "com/lnic/ioc/applicationContext.xml");//載入spring配置文件applicationContext.xml

    ????????String?sql?
    =?"select?*?from?user";
    ????????JdbcTemplate?jt?
    =?(JdbcTemplate)?ctx.getBean("jdbcTemplate");//這里采用spring的JdbcTemplate,通過spring的配置文件啟用mysql_dataSource數據源。
    ????????jt.query(sql,?new?RowCallbackHandler()?{
    ????????????
    public?void?processRow(ResultSet?rs)?throws?SQLException?{
    ????????????????
    //?do?something?with?the?rowdata?-?like?create?a?new
    ????????????????
    //?object?and?add?it?to?the?List?in?the?enclosing?code
    ????????????????System.out.println("IocDataSource?executing?results:");
    ????????????????
    int?numcols?=?rs.getMetaData().getColumnCount();
    ????????????????
    ????????????????
    do?{
    ????????????????????
    for?(int?i?=?1;?i?<=?numcols;?i++)?{
    ????????????????????????System.out.print(
    "\t"?+?rs.getString(i));
    ????????????????????}

    ????????????????????System.out.println(
    "");
    ????????????????}
    ?while?(rs.next());
    ????????????}

    ????????}
    );
    ????}

    }


    代碼輸出如下:
    IocDataSource executing results:
    ?123?matthew?YunNanUniversity
    ?1?lidexian?YunNanUniversity
    ?2?zhangzili?HunanUniversity
    posted on 2006-12-26 13:25 matthew 閱讀(457) 評論(0)  編輯  收藏 所屬分類: JavaEE
    主站蜘蛛池模板: 国产99久久久国产精免费| 亚洲av日韩专区在线观看| 亚洲男人电影天堂| 色在线亚洲视频www| 在线91精品亚洲网站精品成人| 深夜a级毛片免费无码| 国产在线观看免费视频软件| 最近免费中文字幕高清大全| 成人au免费视频影院| 亚洲电影日韩精品| 久久亚洲国产精品成人AV秋霞| 97久久国产亚洲精品超碰热| 免费无遮挡无遮羞在线看| 日本视频免费高清一本18| 99久久99久久精品免费看蜜桃| 国产精品无码一二区免费| 中文字幕不卡亚洲| 亚洲精品国产第1页| 国产亚洲男人的天堂在线观看| 你好老叔电影观看免费| 国产在线a免费观看| 亚洲人成影院在线观看| 亚洲最新中文字幕| 国产精品自拍亚洲| 久久久久久影院久久久久免费精品国产小说 | 久久精品亚洲一区二区| 亚洲色偷精品一区二区三区| 一区二区三区视频免费观看| 国产成人精品免费午夜app| 免费人成在线观看网站视频| 亚洲尹人九九大色香蕉网站| 妇女自拍偷自拍亚洲精品| 亚洲免费视频网站| 国产一级淫片a免费播放口之| 久久久久久亚洲精品| 精品亚洲国产成人av| 84pao国产成视频免费播放| 免费a级毛片无码av| 亚洲成a人片在线观看播放| 久久国产精品免费一区| 成年人免费观看视频网站|