<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

    搜索

    •  

    積分與排名

    • 積分 - 202423
    • 排名 - 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免费放| 久久久久久免费一区二区三区| 免费高清A级毛片在线播放| 自拍日韩亚洲一区在线| 久久久久亚洲AV无码麻豆| 亚洲一级特黄大片无码毛片| 国产精品成人四虎免费视频| 免费看国产精品3a黄的视频| 久久久精品2019免费观看| baoyu777永久免费视频 | 无码国产精品一区二区免费模式| 羞羞视频在线观看免费| 偷自拍亚洲视频在线观看| 亚洲欧美黑人猛交群| 亚洲熟女乱色一区二区三区 | 24小时免费直播在线观看| 久久精品国产免费观看三人同眠| 日韩免费电影网站| 9久热精品免费观看视频| eeuss草民免费| 一区二区三区在线免费| 男女交性无遮挡免费视频| 在线观看免费亚洲| 亚洲AV噜噜一区二区三区| 亚洲AV成人精品日韩一区| 欧美日韩亚洲精品| 美女被免费网站在线视频免费 | 成年在线观看免费人视频草莓| 国产精品成人观看视频免费| 国内精自视频品线六区免费| 免费看h片的网站| 西西大胆无码视频免费| 最新中文字幕免费视频| 日韩精品免费一区二区三区| 四虎AV永久在线精品免费观看| 亚洲片国产一区一级在线观看 | 中文字幕无线码免费人妻|