隨筆-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 華夢行 閱讀(158) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 曲麻莱县| 安宁市| 宣汉县| 宿州市| 红安县| 沈丘县| 锡林浩特市| 右玉县| 兴文县| 凉山| 江油市| 二连浩特市| 宜州市| 广灵县| 诸暨市| 青州市| 青岛市| 六安市| 瓦房店市| 杭州市| 漾濞| 丹凤县| 巴里| 武邑县| 泸西县| 金川县| 宁都县| 长春市| 永靖县| 芜湖县| 尚义县| 茶陵县| 赣榆县| 若尔盖县| 桃江县| 刚察县| 青冈县| 西华县| 南川市| 库尔勒市| 香港|