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

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

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

    隨筆-295  評論-26  文章-1  trackbacks-0

    文章: 49
    積分: 89
    來自: 浙江杭州

    ?????? 時間: 2007-02-09 14:38 ?? 關鍵字: ? Spring?spring ??? ???

    1、使用JdbcTemplate的execute()方法執行SQL語句

    代碼
    1. jdbcTemplate.execute( "CREATE?TABLE?USER?(user_id?integer,?name?varchar(100))" );??

    2、如果是UPDATE或INSERT,可以用update()方法。
    代碼
    1. jdbcTemplate.update("INSERT?INTO?USER?VALUES('"??
    2. ???????????+?user.getId()?+?"',?'"??
    3. ???????????+?user.getName()?+?"',?'"??
    4. ???????????+?user.getSex()?+?"',?'"??
    5. ???????????+?user.getAge()?+?"')"); ??

    3、帶參數的更新
    代碼
    1. jdbcTemplate.update("UPDATE?USER?SET?name?=???WHERE?user_id?=??",?new?Object[]?{name,?id});??

    代碼
    1. jdbcTemplate.update("INSERT?INTO?USER?VALUES(?,??,??,??)",?new?Object[]?{user.getId(),?user.getName(),?user.getSex(),?user.getAge()}); ??

    4、使用JdbcTemplate進行查詢時,使用queryForXXX()等方法
    代碼
    1. int?count?=?jdbcTemplate.queryForInt("SELECT?COUNT(*)?FROM?USER");??

    代碼
    1. String?name?=?(String)?jdbcTemplate.queryForObject("SELECT?name?FROM?USER?WHERE?user_id?=??",?new?Object[]?{id},?java.lang.String.class);??

    代碼
    1. List?rows?=?jdbcTemplate.queryForList("SELECT?*?FROM?USER");??

    代碼
    1. List?rows?=?jdbcTemplate.queryForList("SELECT?*?FROM?USER"); ??
    2. Iterator?it?=?rows.iterator(); ??
    3. while(it.hasNext())?{ ??
    4. ????Map?userMap?=?(Map)?it.next(); ??
    5. ????System.out.print(userMap.get("user_id")?+?"\t"); ??
    6. ????System.out.print(userMap.get("name")?+?"\t"); ??
    7. ????System.out.print(userMap.get("sex")?+?"\t"); ??
    8. ????System.out.println(userMap.get("age")?+?"\t"); ??
    9. } ??

    JdbcTemplate將我們使用的JDBC的流程封裝起來,包括了異常的捕捉、SQL的執行、查詢結果的轉換等等。spring大量使用Template Method模式來封裝固定流程的動作,XXXTemplate等類別都是基于這種方式的實現。
    除了大量使用Template Method來封裝一些底層的操作細節,spring也大量使用callback方式類回調相關類別的方法以提供JDBC相關類別的功能,使傳統的JDBC的使用者也能清楚了解spring所提供的相關封裝類別方法的使用。

    JDBC的PreparedStatement

    代碼
    1. final?String?id?=?user.getId(); ??
    2. final?String?name?=?user.getName(); ??
    3. final?String?sex?=?user.getSex()?+?""; ??
    4. final?int?age?=?user.getAge(); ??
    5. ??
    6. jdbcTemplate.update("INSERT?INTO?USER?VALUES(?,??,??,??)", ??
    7. ?????????????????????new?PreparedStatementSetter()?{ ??
    8. ?????????????????????????public?void?setValues(PreparedStatement?ps)?throws?SQLException?{ ??
    9. ?????????????????????????????ps.setString(1,?id); ??
    10. ?????????????????????????????ps.setString(2,?name);?????????? ??
    11. ?????????????????????????????ps.setString(3,?sex); ??
    12. ?????????????????????????????ps.setInt(4,?age); ??
    13. ?????????????????????????} ??
    14. ?????????????????????}); ??
    15. ??

    代碼
    1. final?User?user?=?new?User(); ??
    2. jdbcTemplate.query("SELECT?*?FROM?USER?WHERE?user_id?=??", ??
    3. ????????????????????new?Object[]?{id}, ??
    4. ????????????????????new?RowCallbackHandler()?{ ??
    5. ????????????????????????public?void?processRow(ResultSet?rs)?throws?SQLException?{ ??
    6. ????????????????????????????user.setId(rs.getString("user_id")); ??
    7. ????????????????????????????user.setName(rs.getString("name")); ??
    8. ????????????????????????????user.setSex(rs.getString("sex").charAt(0)); ??
    9. ????????????????????????????user.setAge(rs.getInt("age")); ??
    10. ????????????????????????} ??
    11. ????????????????????}); ??
    12. ??

    代碼
    1. class?UserRowMapper?implements?RowMapper?{ ??
    2. ????public?Object?mapRow(ResultSet?rs,?int?index)?throws?SQLException?{ ??
    3. ????????User?user?=?new?User(); ??
    4. ??
    5. ????????user.setId(rs.getString("user_id")); ??
    6. ????????user.setName(rs.getString("name")); ??
    7. ????????user.setSex(rs.getString("sex").charAt(0)); ??
    8. ????????user.setAge(rs.getInt("age")); ??
    9. ??
    10. ????????return?user; ??
    11. ????} ??
    12. } ??
    13. ??
    14. public?List?findAllByRowMapperResultReader()?{ ??
    15. ????String?sql?=?"SELECT?*?FROM?USER"; ??
    16. ????return?jdbcTemplate.query(sql,?new?RowMapperResultReader(new?UserRowMapper())); ??
    17. } ??
    18. ??

    在getUser(id)里面使用UserRowMapper

    代碼
    1. public?User?getUser(final?String?id)?throws?DataAccessException?{ ??
    2. ????String?sql?=?"SELECT?*?FROM?USER?WHERE?user_id=?"; ??
    3. ????final?Object[]?params?=?new?Object[]?{?id?}; ??
    4. ????List?list?=?jdbcTemplate.query(sql,?params,?new?RowMapperResultReader(new?UserRowMapper())); ??
    5. ??
    6. ????return?(User)?list.get(0); ??
    7. } ??

    網上收集
    org.springframework.jdbc.core.PreparedStatementCreator 返回預編譯SQL 不能于Object[]一起用

    代碼
    1. public?PreparedStatement?createPreparedStatement(Connection?con)?throws?SQLException?{ ??
    2. ?return?con.prepareStatement(sql); ??
    3. } ??

    1.增刪改
    org.springframework.jdbc.core.JdbcTemplate 類(必須指定數據源dataSource)
    代碼
    1. template.update("insert?into?web_person?values(?,?,?)",Object[]); ??


    代碼
    1. template.update("insert?into?web_person?values(?,?,?)",new?PreparedStatementSetter(){?匿名內部類?只能訪問外部最終局部變量 ??
    2. ??
    3. ?public?void?setValues(PreparedStatement?ps)?throws?SQLException?{ ??
    4. ??ps.setInt(index++,3); ??
    5. }); ??

    org.springframework.jdbc.core.PreparedStatementSetter 接口 處理預編譯SQL
    代碼
    1. public?void?setValues(PreparedStatement?ps)?throws?SQLException?{ ??
    2. ?ps.setInt(index++,3); ??
    3. } ??

    2.查詢JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)
    org.springframework.jdbc.core.RowMapper 記錄映射接口 處理結果集
    代碼
    1. public?Object?mapRow(ResultSet?rs,?int?arg1)?throws?SQLException?{???int表當前行數 ??
    2. ??person.setId(rs.getInt("id")); ??
    3. } ??
    4. List?template.query("select?*?from?web_person?where?id=?",Object[],RowMapper); ??

    org.springframework.jdbc.core.RowCallbackHandler 記錄回調管理器接口 處理結果集
    代碼
    1. template.query("select?*?from?web_person?where?id=?",Object[],new?RowCallbackHandler(){ ??
    2. ?public?void?processRow(ResultSet?rs)?throws?SQLException?{ ??
    3. ??person.setId(rs.getInt("id")); ??
    4. }); ??


    大盤預測 國富論
    posted on 2007-09-06 18:04 華夢行 閱讀(157) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: www成人免费观看网站| 亚洲Av无码国产情品久久| 国产v精品成人免费视频400条| 91香蕉成人免费网站| 日本黄色免费观看| 久久夜色精品国产亚洲av | 国产精品免费小视频| 亚洲AV无码成人精品区蜜桃| 亚洲黄色免费电影| 日韩精品亚洲专区在线影视| 成人无码区免费A∨直播| **真实毛片免费观看| 思思99re66在线精品免费观看| 亚洲一区二区三区在线视频| 久久亚洲美女精品国产精品| 亚洲精品天堂成人片AV在线播放| 久久国产精品成人免费| 四虎国产精品免费视| 久久久久久亚洲AV无码专区| 无遮挡免费一区二区三区| 18禁无遮挡无码网站免费| 久久精品国产亚洲夜色AV网站| 一级做a爱过程免费视| 国产麻豆免费观看91| 亚洲香蕉在线观看| 98精品全国免费观看视频| 亚洲色欲一区二区三区在线观看| 久久亚洲精品无码av| 在线成人a毛片免费播放| 亚洲人成网站色在线观看| 91免费国产自产地址入| 亚洲精品亚洲人成在线观看麻豆| 国产成人免费AV在线播放| 亚洲av无码片在线播放| 日韩成人免费视频| 亚洲国产精品免费在线观看| 国产精品免费精品自在线观看| 亚洲国产精品人久久电影| 免费一本色道久久一区| 日本亚洲中午字幕乱码| 国产成人亚洲精品影院|