Kela's Blog

                      前面的路很坎坷,但畢竟是條路.也許走過這一段就會發現,走過去就是夢想中的地方.因此堅持成為此刻唯一能做且必須去做的事情.
          posts - 9, comments - 27, trackbacks - 0, articles - 15

          kela的筆記 應用程序框架 ---- spring(10)

          Posted on 2006-11-09 11:54 Kela 閱讀(270) 評論(0)  編輯  收藏 所屬分類: 我的筆記(Spring)

          摘要:使用JDBCTemplate

          ?

          對于一個基本的JDBC存取,Connection的取得,Statement的建立,異常處理,Statement的關閉,Connection的關閉這些流程大致在不同的數據庫技術上大致是相同的。Spring提供的JdbcTemplate類,被設計為線程安全,當中所提供的一些操作方法封裝了類似上面的流程。

          ?

          ?

          ???? 對于UserDAO.javaJdbcTemplate改進

          ?

          只需要改進相應的方法就可以了,其它的程序與文件不用變動。

          ?

          package com.kela.spring.jdbc;

          ?

          import java.util.Iterator;

          import java.util.List;

          import java.util.Map;

          ?

          import javax.sql.DataSource;

          ?

          import org.springframework.jdbc.core.JdbcTemplate;

          ?

          import com.kela.spring.util.Util;

          ?

          public class Test implements IUserDAO {

          ???

          ??? private JdbcTemplate jdbcTemplate;

          ?

          ??? public void setDataSource(DataSource dataSource) {

          ??????? jdbcTemplate = new JdbcTemplate(dataSource);

          ??? }

          ?

          ??? public void insert(User user) {

          ??????? String name = user.getName();

          ??????? int age = user.getAge().intValue();

          ?

          ??????? String sql = "INSERT INTO user (name, age) VALUES ('" + name + "', " + age + ")";

          ??????? // 轉碼

          ??????? sql = Util.GBKToISO(sql);

          ???????

          ??????? jdbcTemplate.update(sql);

          ??? }

          ?

          ??? public User find(Integer id) {

          ???????

          ??????? String sql = "SELECT * FROM user WHERE id = " + id.intValue();

          ???????

          ??????? List rs = jdbcTemplate.queryForList(sql);

          ???????

          ??????? Iterator it = rs.iterator();

          ???????

          ??????? if(it.hasNext()) {

          ??????????? Map userMap = (Map)it.next();

          ??????????? Integer i = new Integer(userMap.get("id").toString());

          ??????????? String name = Util.getStr(userMap.get("name").toString());// 轉碼

          ??????????? Integer age? = new Integer(userMap.get("age").toString());

          ???????????

          ??????????? User user = new User();

          ??????????? user.setId(i);

          ??????????? user.setAge(age);

          ??????????? user.setName(name);

          ??????????? return user;

          ??????? }

          ??????? return null;

          ??? }

          }

          ?

          ???? 幾種JdbcTemplate執行與更新,查詢的演示

          ?

          A.? 使用JdbcTemplateexecute()方法執行SQL陳述。

          jdbcTemploat.execute(sql);

          B.? 如果是Updateinsert,使用update()方法。

          ?

          … … …

          使用預編譯SQL

          public void insert(User user) {

          ??????? final String name = user.getName();

          ??????? final int age = user.getAge().intValue();

          ???????

          ??????? jdbcTemplate.update(new PreparedStatementCreator() {

          ?

          ??????????? public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {

          ??????????????? String sql = "INSERT INTO user (name, age) VALUES (?, ?)";

          ??????????????? PreparedStatement ps = conn.prepareStatement(sql);

          ??????????????? ps.setString(1, name);

          ??????????????? ps.setInt(2, age);

          ??????????????? return ps;

          ??????????? }

          ??????? }

          ??????? );

          ??? }

          ?

          … … …

          ?

          public void insert(User user) {

          ??????? final String name = user.getName();

          ??????? final int age = user.getAge().intValue();

          ???????

          ??????? String sql = "INSERT INTO user (name, age) VALUES (?, ?)";

          ??????? jdbcTemplate.update(sql, new PreparedStatementSetter() {

          ?

          ??????????? public void setValues(PreparedStatement ps) throws SQLException {

          ??????????????? ps.setString(1, name);

          ??????????????? ps.setInt(2, age);

          ??????????? }

          ??????? });

          ??? }

          ?

          … … …

          ?

          public void insert(User user) {

          ??? String sql = "INSERT INTO user (name, age) VALUES (?, ?)";

          ??? jdbcTemplate.update(sql, new Object[] {user.getName(), user.getAge()});

          }

          ?

          … … …

          ?

          C.? 使用JdbcTemplate進行查詢時,可是使用queryForXXX()等方法。

          ?

          // 返回一個整型

          jdbcTemplate.queryForInt(“select count * from user)

          ?

          // 返回一個查詢后的結果對象

          jdbcTemplate.queryForObject(“select name from user where id = ?”,

          new Object[] {id},

          java.lang.String.class);

          ?

          // 返回多筆資料的列表

          jdbcTemplate.queryForList (“select * from user”;

          ?

          List 中包括的事Map對象,每個Map對象代表查詢結果的一行記錄。

          ?

          分享到:
          主站蜘蛛池模板: 岑溪市| 舞阳县| 弥渡县| 呼玛县| 娄烦县| 华亭县| 南城县| 道孚县| 吐鲁番市| 胶南市| 成都市| 桂林市| 清水县| 南涧| 沧源| 丘北县| 古浪县| 武威市| 塘沽区| 宁河县| 定日县| 全州县| 颍上县| 宝鸡市| 恩施市| 尚志市| 汉源县| 连江县| 永善县| 永安市| 马龙县| 射阳县| 万山特区| 蚌埠市| 北流市| 绵阳市| 海淀区| 江山市| 钦州市| 若尔盖县| 凉山|