`

springJDBC 转

阅读更多
ResultSetExtractor 
RowMapper   返回list
RowCallbackHandler 自己处理返回结果,这是一个接口,实现这个接口自己处理我需要的东西,有状态的.P329


最基本的调用方法
query(PreparedStatementCreator psc, RowCallbackHandler rch) 

query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch) ,利用pss设置传入SQL的参数

query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch) ,利用args,argTypes设置传入的参数.Cool

update(String sql, Object[] args, int[] argTypes)  Cool

update(PreparedStatementCreator psc, PreparedStatementSetter pss) 


查询语句回调是因为,返回多个值


update语句没有回调,一般都是返回影响了多少个值


===========
两个类的最后的方法
Spring 2.5中JdbcTemplate类query方法的三种回调接口




使用三种Callback接口作为参数的query方法的返回值不同:   

以ResultSetExtractor作为方法参数的query方法返回Object型结果,要使用查询结果,我们需要对其进行强制转型;   

以RowMapper接口作为方法参数的query方法直接返回List型的结果;   

以RowCallbackHandler作为方法参数的query方法,返回值为void; 

RowCallbackHandler和RowMapper才是我们最常用的选择   

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.RowMapperResultSetExtractor;

public class YJ {

	/**
	 * 
	 * 返回结果是List里装Map,使用参数,使用回调 RowMapperResultSetExtractor用于处理单行记录,
	 * 
	 * 它内部持有一个RowMapper实例的引用,当处理结果集的时候, 会将单行数据的处理委派给其所持有的RowMapper实例,而其余工作它负责
	 * 
	 */

	public void getListRowMapperResultSetExtractor() {

		ApplicationContext context = new FileSystemXmlApplicationContext(

		"src/database_config.xml");

		// E:\demoworkspace\spring 为工程主目录

		JdbcTemplate jt = new JdbcTemplate((DataSource) context

		.getBean("oracleDataSourceTest")); // 测试用的方法

		Object[] arg = new Object[] { 10 };

		List list = (ArrayList) jt.query("select * from region where rownum<?",

		arg, new RowMapperResultSetExtractor(new RowMapper() {

			public Object mapRow(ResultSet rs, int index)

			throws SQLException {

				Map u = new HashMap(); // 可以是自己的JavaBean值对象(简单Java对象POJO)

				u.put("region_id", rs.getString("region_id"));

				u.put("region_name", rs.getString("region_name"));

				return u;

			}

		}));

		Iterator it = list.iterator();

		while (it.hasNext()) {

			Map map = (Map) it.next();

			System.out.println(map.toString());

		}

	}

	/**
	 * 返回结果是List里装Map,不使用参数,使用回调
	 * 
	 * 使用RowMapper比直接使用ResultSetExtractor要方便的多,只负责处理单行结果就行,现在,我们只需要将单行的结果组装后返回就行,
	 * 
	 * 剩下的工作,全部都是JdbcTemplate内部的事情了。
	 * 实际上,JdbcTemplae内部会使用一个ResultSetExtractor实现类来做其余的工作,
	 * 
	 * 毕竟,该做的工作还得有人做不是?!
	 * 
	 */

	public void getListRowMapper() {

		ApplicationContext context = new FileSystemXmlApplicationContext(

		"src/database_config.xml");

		JdbcTemplate jt = new JdbcTemplate((DataSource) context

		.getBean("oracleDataSourceTest"));

		List list = jt.query(

		"select * from region where rownum<10", new RowMapper() {

			public Object mapRow(ResultSet rs, int index)

			throws SQLException {

				Map u = new HashMap();

				u.put("region_id", rs.getString("region_id"));

				u.put("region_name", rs.getString("region_name"));

				return u;

			}

		});

		Iterator it = list.iterator();

		while (it.hasNext()) {

			Map map = (Map) it.next();

			System.out.println(map.toString());

		}

	}

	// 返回记录集

	/**
	 * 
	 * RowCallbackHandler虽然与RowMapper同是处理单行数据,不过,除了要处理单行结果,它还得负责最终结果的组装和获取工作,
	 * 
	 * 在这里我们是使用当前上下文声明的List取得最终查询结果, 不过,我们也可以单独声明一个RowCallbackHandler实现类,
	 * 
	 * 在其中声明相应的集合类,这样,我们可以通过该RowCallbackHandler实现类取得最终查询结果
	 * 
	 */

	public void getListRowCallbackHandler() {

		ApplicationContext context = new FileSystemXmlApplicationContext(

		"src/database_config.xml");

		JdbcTemplate jt = new JdbcTemplate((DataSource) context

		.getBean("oracleDataSourceTest"));

		String sql = "select * from region where region_id>?";

		final List<Map> list = new ArrayList<Map>(); // 一定要用final定义

		Object[] params = new Object[] { 0 };

		jt.query(sql, params, new RowCallbackHandler() {

			public void processRow(ResultSet rs) throws SQLException {

				Map u = new HashMap();

				u.put("region_id", rs.getString("region_id"));

				u.put("region_name", rs.getString("region_name"));

				list.add(u);

			}

		});

		Iterator it = list.iterator();

		while (it.hasNext()) {

			Map map = (Map) it.next();

			System.out.println(map.toString());

		}

	}
}


===========================
	public List<ProjectModel> getProjectListByPMID (String pm_id) throws DataAccessException, DocumentException, IOException{
		List<ProjectModel>  lProjects = new ArrayList<ProjectModel>();
		this.getJdbcTemplate().query(SQLManager.getSQL("getProjectListByPMID"),new Object[]{pm_id},new int[]{Types.VARCHAR}, new GetProjectListByPMIDRowCallbackHandler(lProjects));
		
		return lProjects;
		
	}
	
	private class GetProjectListByPMIDRowCallbackHandler implements RowCallbackHandler {
	
		List<ProjectModel>  lProjects = new ArrayList<ProjectModel>();
		
		private GetProjectListByPMIDRowCallbackHandler(List<ProjectModel> l){
			this.lProjects = l;
		}
		
		public void processRow(ResultSet rs) throws SQLException{
			ProjectModel project = new ProjectModel();
			project.setProjectID(String
					.valueOf(rs.getInt("id")));
			project.setProjectName(Utils.convertNull(rs
					.getString("project_name")));
			project.setProjectWON(Utils.convertNull(rs
					.getString("project_won")));
			lProjects.add(project);
		}
	}
	

================
	public int addSkill(String skillName)  throws DataAccessException, DocumentException, IOException{
		return this.getJdbcTemplate().update(SQLManager.getSQL("addSkill"),new Object[]{skillName},new int[]{Types.VARCHAR});
	}

======================
CallableStatementCallback callBack = new CallableStatementCallback(){
			public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException{
				cs.setString(1, empID);
				cs.registerOutParameter2, java.sql.Types.NUMERIC);// out_success
				cs.execute();
				return (CallableStatement) cs;
				}
		};
		 cs = (CallableStatement)this.getJdbcTemplate().execute(sql, callBack);
	       int totalRecords = cs.getInt(7);

 

分享到:
评论

相关推荐

    SpringJDBC.rar_SpringJDBC_spring jdbc

    通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...

    springjdbc.zip_SpringJDBC_spring jdbc_spring 增删改查_springjdbc xml

    这个`springjdbc.zip`压缩包很可能包含了示例代码和配置文件,用于演示如何使用Spring JDBC来执行基本的数据库操作,如增、删、改、查。 1. **Spring JDBC模块**:Spring JDBC模块主要由`org.springframework.jdbc`...

    Spring JDBC应用实例讲解

    Spring JDBC是Spring框架中的一个核心模块,主要用于简化Java数据库编程。在本文中,我们将深入探讨Spring JDBC的应用实例,了解如何利用它来实现高效且灵活的数据访问。首先,我们需要理解Spring JDBC是如何通过...

    spring JDbc

    Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一个高级抽象层,简化了数据库操作。在本实例中,我们将深入探讨Spring JDBC的使用,并以`SpringJdbcTemplate`为例来阐述其主要功能和优势...

    SpringMVC+SpringJDBC

    SpringMVC和SpringJDBC是Java开发中两个重要的框架,它们分别是Spring框架在Web层和数据访问层的应用。本文将详细介绍这两个组件的核心概念、工作原理以及如何整合使用,旨在帮助开发者更好地理解和应用。 **...

    spring JDBC所需jar包

    在Java开发中,Spring框架是不可或缺的一部分,尤其在处理数据访问层时,Spring JDBC提供了一种强大而灵活的方式来管理数据库连接。Spring JDBC模块是Spring框架的一部分,它简化了JDBC的使用,使得开发者可以更加...

    SpringJDBC

    Spring JDBC是Spring框架的一个核心模块,它为Java开发者提供了便捷的方式来操作数据库。Spring JDBC通过抽象出数据库连接管理、事务处理以及结果集处理等繁琐工作,使得开发者可以专注于SQL语句和业务逻辑,而不必...

    Spring JDBC 增删改查

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得我们能够更方便地使用Java数据库连接(JDBC)来处理数据库操作,如增删改查(CRUD)。在这个主题下,我们将深入探讨Spring JDBC的核心概念、配置、以及...

    SpringJDBC.rar_jdbc spring_spring jd_spring jdbc_spring使用JDBC进行数

    这个“SpringJDBC.rar”压缩包文件可能包含了关于如何在Spring框架中集成和使用JDBC的相关示例和教程。下面将详细解释Spring JDBC的核心概念、功能以及使用方法。 首先,Spring JDBC的核心目标是简化传统的JDBC编程...

    spring JDBC

    ### Spring JDBC 概述 Spring框架提供了一种强大的机制来简化Java应用程序中的数据库访问操作,这一机制即为Spring JDBC模块。通过Spring JDBC,开发者能够更加高效地管理与数据库的交互,减少传统JDBC编程中常见的...

    SpringJDBC.rar_SpringJDBC_jdbctemplate_jdbctemplate spring

    在Java的Spring框架中,Spring JDBC(Java Database Connectivity)是一个重要的模块,用于简化数据库操作。Spring JDBC通过提供JdbcTemplate和SimpleJdbcTemplate等工具类,帮助开发者以更安全、更易于管理的方式与...

    spring对jdbc的支持jar包

    本文将深入探讨Spring对JDBC(Java Database Connectivity)的支持,以及如何在实际项目中使用这些功能。 首先,Spring JDBC的核心是`org.springframework.jdbc`包,它提供了一套高级抽象,用于简化数据库操作。在...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一种抽象层,使得开发者可以更轻松地处理数据库操作。Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于...

    SpringMVC+Spring+SpringJDBC

    **SpringMVC、Spring与SpringJDBC整合详解** 在Java Web开发中,Spring框架因其强大的功能和灵活性而被广泛使用。SpringMVC、Spring和SpringJDBC是Spring框架的三个重要组成部分,它们协同工作,提供了从用户接口到...

    Springjdbc

    Spring JDBC是Spring框架的一个核心模块,它为Java开发者提供了对JDBC(Java Database Connectivity)的高级封装,使得数据库操作变得更加简单、易管理。在Spring框架中,Spring JDBC通过一系列的抽象层,如...

    spring-jdbc jar包.rar

    《Spring JDBC:构建高效数据访问层》 Spring JDBC是Spring框架的一个重要组成部分,它提供了一种简化传统JDBC编程的抽象层,使得开发者能够更轻松、更安全地处理数据库交互。"spring-jdbc jar包"包含了Spring框架...

    Spring mvc、 Spring、 Spring jdbc 整合 demo

    本示例"Spring mvc、Spring、Spring jdbc 整合 demo"着重展示了Spring框架的三大关键模块:Spring MVC(模型-视图-控制器)、Spring Core以及Spring JDBC的集成与应用。 1. **Spring MVC** Spring MVC是Spring框架...

    spring-jdbc.rar源码 学习分析用

    《Spring JDBC源码深度解析与应用实践》 在Java领域,Spring框架以其强大的功能和灵活的设计,成为企业级开发的首选。Spring JDBC模块是Spring框架的重要组成部分,它为开发者提供了简洁、高效的数据库操作方式,...

    SpringJDBC入门Demo

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,简化了Java数据库编程。这个入门Demo将引导我们了解如何使用Spring JDBC来与数据库进行交互。在本文中,我们将深入探讨Spring JDBC的核心概念、基本操作以及...

    springJdbcDemo11_java_springjdbc_

    在这个"springJdbcDemo11_java_springjdbc_"项目中,我们将深入探讨Spring集成JDBC的基本概念、配置和核心组件,以及如何通过实例快速上手并理解其工作原理。 1. **Spring JDBC简介** Spring JDBC模块是为了简化...

Global site tag (gtag.js) - Google Analytics