Kela's Blog

            前面的路很坎坷,但毕竟是条路.也许走过这一段就会发现,走过去就是梦想中的地方.因此坚持成为此刻唯一能做且必须去做的事情.
posts - 9, comments - 27, trackbacks - 0, articles - 15

kela的笔记 应用程序框架 ---- spring(10)

Posted on 2006-11-09 11:54 Kela 阅读(257) 评论(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对象代表查询结果的一行记录。

 


只有注册用户登录后才能发表评论。


网站导航:
 
分享到: