`
irfen
  • 浏览: 204862 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用JDBC Template处理数据

 
阅读更多

1. JDBCTemplate模板的update

update一般用于insert等有参数同时传入的且无需返回结果的SQL语句。

三个方法:

public int update(String sql,Object[] args)
public int update(String sql,Object[] args,int[] argTypes)
public int update(String sql,PreparedStatementSetter pss)

 

还有一个方法不过太诡异了,不用之……这里比较搞笑的是第1和第2个,第一个方法中:这里Object []args,居然是由Spring猜测各个类型(反射),而不是顺序按照参数填入……囧。。。

第三个需要匿名类,写一下:

 

String sql = "insert into t_forum(forum_name,forum_desc) values(?,?)";
   getJdbcTemplate().update(sql, new PreparedStatementSetter(){
    public void setValues(PreparedStatement ps) throws SQLException 
    {
     // TODO Auto-generated method stub
     ps.setString(1, forum.getForumName());
     ps.setString(2, forum.getForumDesc());
    }
   });

 2. 更新并获得“新的主键ID”(前提是id是整数)

 

public void addFourm(final Forum forum)
{
   final String sql = "insert into t_forum(forum_name,forum_desc) values(?,?)";
   KeyHolder holder = new GeneratedKeyHolder();
   getJdbcTemplate().update(new PreparedStatementCreator(){

    @Override
    public PreparedStatement createPreparedStatement(Connection conn)
      throws SQLException {
     PreparedStatement ps = conn.prepareStatement(sql);
     ps.setString(1, forum.getForumName());
     ps.setString(2, forum.getForumDesc());
     return ps;
    }

   },holder);
   forum.setForumId(holder.getKey().intValue());
}

 3. JdbcTemplate批量执行SQL语句

两种方法:

 

public int[] batchUpdate(String[] sql)
public int[] batchUpdate(String sql,BatchPreparedStatementSetter pss)

 很显然了,第一个是给一个多个SQL语句的数组,第二个则是根据基础的SQL语句,辅助以BathPreparedStatement,这样在每个pss中,只需要构造逐次的一条SQL语句即可(批量生成SQL语句)。

主要写下面方法的实现:

 

public void addForums(final LinkedList<Forum> forums)
{
   String sql = "insert into t_forum(forum_name,forum_desc) values(?,?)";
   this.getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter()
   {

    @Override
    public int getBatchSize() {
     return forums.size();
    }

    @Override
    public void setValues(PreparedStatement ps, int i)
      throws SQLException {
     // TODO Auto-generated method stub
     Forum f = forums.get(i);
     ps.setString(1,f.getForumName());
     ps.setString(2, f.getForumDesc());
    }
   });
}

 4. 查询数据:RowCallbackHandler

当需要查询数据的时候,可以使用众多回调器,RowCallbackHandler。

 

public void query(String sql, RowCallbackHandler rch)
public void query(String sql,Object[] args,RowCallbackHandler rch)

 

public Forum getForum(final int forumID)
{
   String sql = "select * from t_forum where forum_id=?";
   final Forum f = new Forum();
   this.getJdbcTemplate().query(sql,
     new PreparedStatementSetter()
   {

    @Override
    public void setValues(PreparedStatement ps) throws SQLException {
     // TODO Auto-generated method stub
     ps.setInt(1, forumID);
    }
   
   },
     new RowCallbackHandler()
   {

    @Override
    public void processRow(ResultSet rs) throws SQLException {
     // TODO Auto-generated method stub
     f.setForumId(rs.getInt("forum_id"));
     f.setForumName(rs.getString("forum_name"));
     f.setForumDesc(rs.getString("forum_desc"));    
    }
   
   });
  
   return f;
}

 5. 查询数据:使用RowMapper

RowMapper的好处是,自动封装了List,并自动返回,无需自己添加List和把元素添加到List中。

 

public List query(String sql,Object[] args,int[] argTypes,RowMapper rowMapper)

public List<Forum> getForums(final int forumID)
{
   String sql = "select * from t_forum where forum_id>?";
   return (List<Forum>)this.getJdbcTemplate().query(
     sql,
     new Object[]{forumID},
     new int[]{java.sql.Types.INTEGER},
     new RowMapper()
     {
      @Override
      public Object mapRow(ResultSet rs, int i)
        throws SQLException {
       Forum f = new Forum();
       f.setForumName(rs.getString("forum_name"));
       f.setForumId(rs.getInt("forum_id"));
       f.setForumDesc(rs.getString("forum_desc"));   
      
       return f;
      }
     }
     );
}

 6. RowCallbackHandler的子类: RowCountCallbackHandler计算行数

 

public int getForumCounts()
{
   String sql = "select * from t_forum";
   RowCountCallbackHandler countCallback = new RowCountCallbackHandler(); // not reusable
   getJdbcTemplate().query(sql, countCallback);
   int rowCount = countCallback.getRowCount();
   return rowCount;
}

 当然,可以覆盖本类的下述方法,来实现对每条结果的处理,继承自RowCallbackHandler

7.查询单值数据

public int getForumCounts()
{
   String sql = "select count(*) from t_forum";
   return this.getJdbcTemplate().queryForObject(sql, Integer.class);
}

 这里之前存在的那些queryForInt等等现在统统被queryForObject取代,后面的第二个参数填写返回值类型。

分享到:
评论

相关推荐

    java jdbc template

    使用JDBC Template,我们可以更好地组织业务逻辑代码,使其与数据访问层分离,符合面向对象设计原则,有利于系统的扩展和维护。 综上所述,Java JDBC Template在学生信息管理系统中扮演了重要角色,它降低了数据库...

    JDBC_Template

    首先,JDBC_Template是Spring对JDBC API的一层抽象,它将常见的JDBC模板化操作进行了封装,如打开和关闭连接、处理结果集等,开发者无需关注这些底层细节,可以更专注于业务逻辑。在Spring的`spring-jdbc-5.0.0....

    SpringMvc, JDBC Template的例子

    Spring MVC和JDBC Template是Java开发中...这有助于提升你在Java Web开发中的技能,使你能更有效地处理数据交互和业务流程。在实践中,还可以结合MyBatis或Hibernate等ORM框架,进一步优化数据库操作,提高开发效率。

    JDBC Template源码.7z

    首先,JDBC Template通过预编译SQL语句、自动处理结果集以及事务管理,大大减少了手动编写JDBC代码的工作量。它将数据库操作封装成模板方法,使得开发者可以专注于业务逻辑,而无需关注底层的连接管理和异常处理。在...

    使用spring jdbc template简化jdbc数据库操作实例代码

    本实例将深入解析如何使用Spring JDBC Template进行数据库操作,并包含详细的测试用例。 首先,我们需要在项目中引入Spring JDBC的相关依赖。在Maven工程中,可以在pom.xml文件中添加如下依赖: ```xml ...

    spring jdbc Templatetest 访问mysql数据库,批量插入数据

    本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...

    jdbc(template).zip

    4. **事务支持**:Spring JDBC Template提供了一套易于使用的事务管理API,可以方便地在业务代码中进行事务的开始、提交、回滚操作,提高了代码的事务处理能力。 5. **异常处理**:JDBC Template将数据库抛出的异常...

    前期项目 Spring+Spring MVC+JDBC Template 增删改查

    在Spring MVC中,控制器接收HTTP请求,调用业务逻辑(由Spring管理的bean),处理数据,并将结果传递给视图进行渲染。 JDBC(Java Database Connectivity)是Java访问数据库的标准接口。虽然直接使用JDBC可以完成...

    Spring boot+Spring JDBC Template+mysql+ sharding-j-subdb.zip

    在这个场景中,MySQL作为数据存储的后端,与Spring JDBC Template协作,接收并处理应用程序发出的SQL查询,存储和检索数据。 最后,Sharding-J-Subdb(可能指的是ShardingSphere的子项目)是一个用于数据库分片的...

    JDBC Template

    **JDBC Template** JDBC(Java Database Connectivity)模板是Spring框架的一个重要组成部分,它提供了一种简化数据库操作的抽象层,...在实际开发中,正确使用JDBC Template可以显著提高开发效率,同时保证代码质量。

    springboot,jpa,spring data,jdbc template使用代码

    JdbcTemplate是Spring提供的一个简单但强大的JDBC抽象层,它避免了手动管理数据库连接、关闭资源等繁琐工作。通过`JdbcTemplate`,我们可以方便地执行SQL语句,处理结果集,同时它还提供了事务管理的支持。虽然...

    jdbcdao.zip_jdbc ttemplate_loose9l6_oracle_python_rockfps

    - **MySQL**:广泛使用的开源关系型数据库,适合处理大量数据并支持高并发,适用于Web应用程序。 - **Oracle**:强大的企业级数据库系统,提供了高级特性如分布式数据库、ACID事务等,适用于大型企业应用。 Python...

    jdbcTemplate

    它提供了模板化的SQL执行方法,从而避免了繁琐的JDBC代码编写,提高了代码的可读性和可维护性。项目经理编写的这个`JDBCTemplate`框架,可能是基于Spring的`JdbcTemplate`进行了二次开发或者封装,以适应项目的特定...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    在项目结构中,`jdbc4mongodb`可能是指该项目同时包含了对关系型数据库(如JDBC)和MongoDB的支持,这表明项目可能涉及多数据源的处理。 总结来说,Spring Data MongoDB通过`MongoDBTemplate`简化了MongoDB的集成和...

    MySql_JDBC, Druid数据库连接池以及Template技术所需jar包.zip

    MySQL JDBC、Druid数据库连接池和Template技术是Java Web开发中的关键组件,它们极大地提高了数据库操作的效率和便捷性。让我们深入探讨这些知识点。 首先,MySQL JDBC(Java Database Connectivity)是Java与MySQL...

    spring-jdbc-dao

    2. Spring的JDBC DAO实现:在Spring中,我们可以创建一个接口定义数据库操作,然后使用Spring的ProxyFactoryBean或AOP来实现接口,实现事务管理和异常处理。 三、Spring JDBC核心组件 1. DataSource:数据源是连接...

    sharding-jdbc的使用

    5. **数据库操作**:使用普通的JDBC API或者ORM框架(如MyBatis)进行数据库操作,Sharding-JDBC会在底层自动处理分片逻辑。 ### 4. 分片策略 - **标准分片策略**:基于等值分片,适用于按固定字段分片的场景。 - *...

    公交线路搜索系统,mysql+jdbc+servlet+freemarker+json+jquery+arttemplate+百

    MySQL负责数据存储,JDBC和Servlet处理数据交互,Freemarker和ArtTemplate构建用户界面,jQuery增强用户体验,而JSON和百度地图API则提供了数据传输和地图服务。这个系统展示了Web开发中的典型技术栈,为类似应用...

    phase3-spring-jdbc-template-03-07-2021

    Spring JDBC Template是Spring框架的一个重要组件,它提供了一种简化JDBC(Java Database Connectivity)操作的方法,使得开发者可以更方便地进行数据库交互,无需过多关注底层的数据库连接管理、事务处理等细节。...

    spring jdbc.zip

    《Spring JDBC:Spring框架对JDBC...同时,Spring JDBC还结合了Spring的其他模块,如数据源管理和事务处理,提供了完整的数据库访问解决方案。通过合理利用这些工具,开发者可以构建出稳定、高效且易于维护的Java应用。

Global site tag (gtag.js) - Google Analytics