现在的位置: 首页 > 综合 > 正文

Spring中jdbcTemplate

2013年10月12日 ⁄ 综合 ⁄ 共 15122字 ⁄ 字号 评论关闭

转载文章一:

1、使用JdbcTemplate的execute()方法执行SQL语句

Java代码 复制代码 收藏代码
  1. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");    

 

2、如果是UPDATE或INSERT,可以用update()方法。

Java代码 复制代码 收藏代码
  1. jdbcTemplate.update("INSERT INTO USER VALUES('"     
  2.            + user.getId() + "', '"     
  3.            + user.getName() + "', '"     
  4.            + user.getSex() + "', '"     
  5.            + user.getAge() + "')");    

 

3、带参数的更新

Java代码 复制代码 收藏代码
  1. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?"new Object[] {name, id});     
  2.   
  3. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)"new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});    

 

4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法

Java代码 复制代码 收藏代码
  1. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");     
  2.   
  3. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?"new Object[] {id}, java.lang.String.class);  
      
  4.   
  5. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");     
  6.   
  7. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");      
  8. Iterator it = rows.iterator();      
  9. while(it.hasNext()) {      
  10.     Map userMap = (Map) it.next();      
  11.     System.out.print(userMap.get("user_id") + "\t");      
  12.     System.out.print(userMap.get("name") + "\t");      
  13.     System.out.print(userMap.get("sex") + "\t");      
  14.     System.out.println(userMap.get("age") + "\t");      
  15. }    

 JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。

    除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。

 

JDBC的PreparedStatement 

Java代码 复制代码 收藏代码
  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.   
  16.   
  17. final User user = new User();      
  18. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",      
  19.                     new Object[] {id},      
  20.                     new RowCallbackHandler() {      
  21.                         public void processRow(ResultSet rs) throws SQLException {      
  22.                             user.setId(rs.getString("user_id"));      
  23.                             user.setName(rs.getString("name"));      
  24.                             user.setSex(rs.getString("sex").charAt(0));      
  25.                             user.setAge(rs.getInt("age"));      
  26.                         }      
  27.                     });     
  28.   
  29.   
  30. class UserRowMapper implements RowMapper {      
  31.     public Object mapRow(ResultSet rs, int index) throws SQLException {      
  32.         User user = new User();      
  33.      
  34.         user.setId(rs.getString("user_id"));      
  35.         user.setName(rs.getString("name"));      
  36.         user.setSex(rs.getString("sex").charAt(0));      
  37.         user.setAge(rs.getInt("age"));      
  38.      
  39.         return user;      
  40.     }      
  41. }      
  42.      
  43. public List findAllByRowMapperResultReader() {      
  44.     String sql = "SELECT * FROM USER";      
  45.     return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));      
  46. }    

 在getUser(id)里面使用UserRowMapper 

Java代码 复制代码 收藏代码
  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[]一起用 

Java代码 复制代码 收藏代码
  1. public PreparedStatement createPreparedStatement(Connection con) throws SQLException {      
  2.  return con.prepareStatement(sql);      
  3. }    

 1.增删改
org.springframework.jdbc.core.JdbcTemplate   类(必须指定数据源dataSource) 

Java代码 复制代码 收藏代码
  1. template.update("insert into web_person values(?,?,?)",Object[]);     
  2. 或   
  3. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量      
  4.      
  5.  public void setValues(PreparedStatement ps) throws SQLException {      
  6.   ps.setInt(index++,3);      
  7. });    

 org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL 

Java代码 复制代码 收藏代码
  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   记录映射接口  处理结果集 

Java代码 复制代码 收藏代码
  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  记录回调管理器接口 处理结果集 

Java代码 复制代码 收藏代码
  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. });    

 

转载文章二:

  首先在applicationContext.xml中配置数据源dataSource,jdbcTemplate,dao。
<!-- 配置数据源-->
<bean id="dataSource" scope="singleton" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://192.168.1.3:8088/test/>
  <property name="username" value="root"/>
  <property name="password" value="123"/>
  ............
</bean>
<!--配置jdbcTemplate-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" scope="singleton"/>
<!--配置DAO-->
<bean id="fillQuestionDAO" class="com.biao.dao.FillQuestionDAO" scope="singleton"/>
在具体DAO中:FillQuestionDAO
public class FillQuestionDAO implements IFillQuestionDAO{
/**
     * 得到一个数据库连接
     */
    private JdbcTemplate jdbcTemplate;
    /**
     * @return 获得 jdbcTemplate
     */
    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }
    /**
     * @param jdbcTemplate 设置 jdbcTemplate
     */
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    /**
     * 功能:增加新的临时填空题
     */
    public Long addFillQuestion(final FillQuestion fillQuestion) {
        final StringBuffer sql=new StringBuffer();
        sql.append(" insert into filltemp");
        sql.append("(contentTempID,fillTemp,answerOne,parseOne) ");
        sql.append(" values(?,?,?,?); ");
       //临时填空题表中的id为auto_increment,所以可以以下步骤
        GeneratedKeyHolder gkHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(new PreparedStatementCreator(){
            public PreparedStatement createPreparedStatement(Connection con)
                    throws SQLException {
                PreparedStatement ps=con.prepareStatement(sql.toString());
                ps.setLong(1, fillQuestion.getContentTempID());
                ps.setString(2, fillQuestion.getFillTemp());
                ps.setString(3, fillQuestion.getAnswerOne());
                ps.setString(4, fillQuestion.getParseOne());
                return ps;
            }
        },gkHolder);
        return gkHolder.getKey().longValue();
    }
//如果id不为自增,无返回值
public void addFillQuestion(final FillQuestion fillQuestion) {
        final StringBuffer sql=new StringBuffer();
        sql.append(" insert into filltemp");
        sql.append("(contentTempID,fillTemp,answerOne,parseOne) ");
        sql.append(" values(?,?,?,?); ");
        jdbcTemplate.update(sql.toString(),new PreparedStatementSetter(){
             public void setValues(PreparedStatement ps) throws SQLException {
                ps.setLong(1, fillQuestion.getContentTempID());
                ps.setString(2, fillQuestion.getFillTemp());
                ps.setString(3, fillQuestion.getAnswerOne());
                ps.setString(4, fillQuestion.getParseOne());
            }
        });
    }
    /* 功能:删除临时填空题
     * @see com.huazuo.bw.dao.question1_5.IFillQuestionDAO#deleteFillQuestion(com.huazuo.bw.po.FillQuestion)
     */
    public void deleteFillQuestion(final long fillQuestionID) {
        String sql="delete from filltemp where fillTempID=?";
        jdbcTemplate.update(sql,new PreparedStatementSetter(){
            public void setValues(PreparedStatement ps) throws SQLException {
                ps.setLong(1,fillQuestionID);
            }
        });
    }
    /**
     * 功能:更新临时填空题
     * @param fillQuestion
     */
    public void updateFillQuestion(final FillQuestion fillQuestion) {
        StringBuffer sql=new StringBuffer();
        sql.append("update filltemp set fillTempID=?,contentTempID=?,fillTemp=?,answerOne=?,parseOne=?");
        sql.append(" where fillTempID=?");
        jdbcTemplate.update(sql.toString(),new PreparedStatementSetter(){
            public void setValues(PreparedStatement pstmt) throws SQLException {
                int index=1;
                pstmt.setLong(index++, fillQuestion.getFillQuestionID());
                pstmt.setLong(index++,fillQuestion.getContentTempID());
                pstmt.setString(index++, fillQuestion.getFillTemp());
                pstmt.setString(index++, fillQuestion.getAnswerOne());
                pstmt.setString(index++, fillQuestion.getParseOne());
               pstmt.setLong(index++,fillQuestion.getFilQuestionID());
            }
        });
    }
    /**
     * 功能:通过一个临时填空题ID来查询这个临时填空
     * @param fillQuestionID
     * @return
     */
    public FillQuestion findFillQuestion(final Long fillQuestionID) {
        String sql="select fillTempID,contentTempID,fillTemp,answerOne,parseOne from fillTemp where fillTempID=?";
        return (FillQuestion) jdbcTemplate.query(sql, new PreparedStatementSetter(){
            public void setValues(PreparedStatement ps) throws SQLException {
                ps.setLong(1, fillQuestionID);
            }
        },new RowMapper(){
            public Object mapRow(ResultSet rs, int arg1) throws SQLException {
                FillQuestion fillQuestion=new FillQuestion();
                fillQuestion.setFillQuestionID(rs.getLong(1));
                fillQuestion.setContentTempID(rs.getLong(2));
                fillQuestion.setFillTemp(rs.getString(3));
                fillQuestion.setAnswerOne(rs.getString(4)    );
                fillQuestion.setParseOne(rs.getString(5));
                return fillQuestion;
            }
        }).get(0);
    }
    /**功能:查询出所有的填空
     * @return
     */
    public List<FillQuestion> findAllFillQuestion() {
        String sql="select fillTempID,contentTempID,fillTemp,answerOne,parseOne from fillTemp";
        List<FillQuestion> list=null;
        list=jdbcTemplate.query(sql, new PreparedStatementSetter(){
            public void setValues(PreparedStatement pstmt) throws SQLException {
            }},new RowMapper(){
                public Object mapRow(ResultSet rs, int arg1)
                        throws SQLException {
                    FillQuestion fillQuestion=new FillQuestion();
                    fillQuestion.setFillQuestionID(rs.getLong(1));
                    fillQuestion.setContentTempID(rs.getLong(2));
                    fillQuestion.setFillTemp(rs.getString(3));
                    fillQuestion.setAnswerOne(rs.getString(4)    );
                    fillQuestion.setParseOne(rs.getString(5));
                    return fillQuestion;
                }   
            });
        return list;
    }
}
/**
     * 功能:查询某个用户的购物点数余额
     * @param userID:用户ID
     * @return
     */
    public double getShoppingPointsBalance(long userID) {
        String sql="select shoppingPointsBalance from useraccount where userID=?";
        String result=(String)jdbcTemplate.queryForObject(sql.toString(),new Object[]{userID},,java.lang.String.class);
        double points=Double.parseDouble(result);
        return points;
    }
1)执行查询:
  除了execute方法之外,还有其他大量的查询方法。在这些查询方法中,有很大一部分是用来查询单值的,比如返回一个汇总(count)结果或者从返回行结果中取得指定列的值。可以用queryForInt(..),queryForLong(..)或queryForObject(..)方法。 queryForObject方法用来将返回的JDBC类型对象转换成指定的java对象。
    int count=jdbcTemplate.queryForInt("select count(*) from mytable");
    String name=(String)jdbcTemplate.queryForObject("select name from mytable",String.class);
  除了返回单值的查询方法,还有一组返回List结果的方法。如queryForList.
    List rows=jdbcTemplate.queryForList("select * from mytable");
    [{name=Bob,id=1},{name=Mary,id=2}]
2)更新数据库
    jdbcTemplate.update("update mytable set name=? where id=?",new Object[]{name,new Integer(id)});

抱歉!评论已关闭.