`

处理JdbcTemplate放回的结果集

 
阅读更多

ResultSet中结果反射

 

import java.lang.reflect.*;
import java.sql.*;
import java.util.*;
import java.util.Date;

public class ResultToBean {
	
	/**
	 * 将ResultSet内容映射到实体 须有 ColToProperty注解
	 * @param rs
	 * @param clazz
	 * @return
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws SQLException
	 * @throws IllegalArgumentException
	 * @throws InvocationTargetException
	 */
	public static <T> List<T> getBean(ResultSet rs, Class<T> clazz)
			throws SecurityException, NoSuchMethodException,
			InstantiationException, IllegalAccessException, SQLException,
			IllegalArgumentException, InvocationTargetException {
		List<T> l = new ArrayList<T>();
		Method method = null;
		T obj = null;
		while (rs.next()) {
			obj = clazz.newInstance();
			Field fs[] = clazz.getDeclaredFields();
			int count = 1;
			for (Field f : fs) {
				ColToProperty colToProperty = f
						.getAnnotation(ColToProperty.class);
				if (null == colToProperty) {
					continue;
				}
				String m = f.getName().substring(0, 1).toUpperCase()
						+ f.getName().substring(1);
				if (f.getType() == java.lang.Boolean.class) {
					method = clazz.getDeclaredMethod("set" + m, Boolean.class);
					method.invoke(obj, rs.getBoolean(count));
				} else if (f.getType() == boolean.class) {
					method = clazz.getDeclaredMethod("set" + m, boolean.class);
					method.invoke(obj, rs.getBoolean(count));
				} else if (f.getType() == java.util.Date.class
						|| f.getType() == Date.class) {
					method = clazz.getDeclaredMethod("set" + m, Date.class);
					method.invoke(obj, rs.getDate(count));
				} else if (f.getType() == java.lang.Double.class) {
					method = clazz.getDeclaredMethod("set" + m, Double.class);
					method.invoke(obj, rs.getDouble(count));
				} else if (f.getType() == Double.class) {
					method = clazz.getDeclaredMethod("set" + m, double.class);
					method.invoke(obj, rs.getDouble(count));
				} else if (f.getType() == java.lang.Float.class) {
					method = clazz.getDeclaredMethod("set" + m, Float.class);
					method.invoke(obj, rs.getFloat(count));
				} else if (f.getType() == Float.class) {
					method = clazz.getDeclaredMethod("set" + m, float.class);
					method.invoke(obj, rs.getFloat(count));
				} else if (f.getType() == java.lang.Integer.class) {
					method = clazz.getDeclaredMethod("set" + m, Integer.class);
					method.invoke(obj, rs.getInt(count));
				} else if (f.getType() == int.class) {
					method = clazz.getDeclaredMethod("set" + m, int.class);
					method.invoke(obj, rs.getInt(count));
				} else if (f.getType() == java.lang.Short.class
						|| f.getType() == short.class) {
					method = clazz.getDeclaredMethod("set" + m, Short.class);
					method.invoke(obj, rs.getShort(count));
				} else if (f.getType() == java.lang.String.class) {
					method = clazz.getDeclaredMethod("set" + m, String.class);
					method.invoke(obj, rs.getString(count));
				} else if (f.getType() == java.lang.Long.class
						|| f.getType() == long.class) {
					method = clazz.getDeclaredMethod("set" + m, Long.class);
					method.invoke(obj, rs.getLong(count));
				} else {
					throw new RuntimeException("非基础数据类型,无法正确匹配,请检查ColToProperty是否使用正确!");
				}
				count++;
			}
			l.add(obj);
		}
		return l;
	}
}

 

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface ColToProperty {

}

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring 学习 JdbcTemplate,模板模式,回调

    通过使用JdbcTemplate,开发者可以避免编写大量的样板代码,如打开和关闭连接、处理结果集等,从而更加专注于业务逻辑。JdbcTemplate支持各种数据库操作,包括查询、更新、插入和删除,同时提供事务管理功能。 **2....

    只进结果集不支持请求的操作的“解决方法

    为了解决这个问题,我们需要调整创建`Statement`的方式以及处理结果集的方法: 1. **更改结果集类型**:在创建`Statement`对象时,应确保使用适当的结果集类型。如果需要执行像`absolute`这样的操作,必须创建一个...

    spring自带的jdbcTemplate查询、插入预编译使用

    例如,我们可以使用`SimpleJdbcCall`来执行存储过程,并提供一个`SqlParameterSource`来传递参数,再通过`ResultSetExtractor`或`RowCallbackHandler`来处理结果集: ```java SimpleJdbcCall storedProc = new ...

    jdbcTemplate分页彻底解决,使用游标滚动

    然后,`JdbcTemplate`会使用`ResultSetExtractor`接口来处理这个结果集。`SplitPageResultSetExtractor`可能就是这样一个自定义的提取器,用于分割结果集并进行分页处理。 下面是一个使用`JdbcTemplate`进行游标...

    jdbcTemplate

    5. **处理结果**:对于查询操作,可以指定结果集的映射方式,如使用RowMapper或ResultSetExtractor。 在`jdbcTemplate`压缩包文件中,可能包含了实现上述功能的类、配置文件以及其他辅助工具类。这些文件可以帮助...

    SSH笔记-Spring JdbcTemplate

    在Spring4版本中,JdbcTemplate已经成为了一个成熟的模块,它通过提供一系列的模板方法,使得开发者无需直接处理JDBC的低级细节,如手动打开和关闭连接、处理结果集等。这样不仅减少了出错的可能性,也使得代码更加...

    spring-jdbcTemplate实例工程

    Spring JdbcTemplate的出现是为了弥补原生JDBC在编码上的繁琐,它通过模板方法模式,将SQL执行、结果集处理等进行了抽象,使得开发者可以更专注于业务逻辑,而无需过多关注数据库访问的细节。同时,它还提供了事务...

    JdbcTemplate.jar

    JdbcTemplate是Spring提供的一个模板类,它是基于JDBC但又对JDBC进行了高度封装,旨在减少数据库访问时的繁琐代码,如打开和关闭连接、处理结果集等。它通过预编译的SQL语句、批处理以及异常转换等功能,实现了...

    jdbcTemplate的jar包.rar

    JdbcTemplate提供了一种简单、安全的方式来执行SQL语句,避免了手动处理数据库连接、预编译语句、结果集等繁琐工作,从而降低了出错的可能性。本压缩包“jdbcTemplate的jar包.rar”包含了使用Spring的JdbcTemplate所...

    JdbcTemplate

    `UserRowMapper`是自定义的类,用于将结果集的每一行转换为`User`对象。 **3. 自动处理异常和资源关闭** JdbcTemplate会自动处理JDBC相关的异常,比如SQLException,并转换为Spring的DataAccessException。此外,...

    jdbcTemplate相关jar包.zip

    5. 处理结果:JdbcTemplate会自动处理结果集,将数据转换为Java对象。 JdbcTemplate提供的主要API包括: - `query(String sql, RowMapper&lt;T&gt; rowMapper)`: 执行SQL查询并使用RowMapper将结果映射到自定义类型。 - `...

    打印JdbcTemplate执行sql

    `JdbcTemplate`是Spring对JDBC的轻量级封装,它消除了手动管理连接、事务和结果集的繁琐过程,提高了代码的可读性和可维护性。通过使用模板方法设计模式,`JdbcTemplate`提供了一系列静态和非静态的方法来执行各种...

    jdbcTemplate-spring对jdbc的支持

    JdbcTemplate提供了一种模板方法模式,使得开发人员可以更加便捷、安全地执行SQL语句,而无需关心诸如打开和关闭连接、处理结果集等低级细节。 首先,我们来详细了解一下JdbcTemplate。在传统的JDBC编程中,我们...

    Spring JdbcTemplate api

    在`JdbcTemplate`的设计中,模板(Template)承担着事物控制、资源管理和异常处理的责任,而回调(Callback)则专注于实现应用程序特有的逻辑,如创建SQL语句、设置参数和处理结果集。这种分离使得开发者能够更专注...

    JdbcTemplate简单实例

    JdbcTemplate通过预编译的SQL语句、参数绑定和结果集处理等功能,有效地降低了SQL注入的风险,同时也提高了代码的可读性和可维护性。 ### JdbcTemplate的核心特性 1. **自动管理连接**:JdbcTemplate会自动管理...

    spring jdbcTemplate 源码

    首先,让我们了解在不使用JDBCTemplate时,传统的JDBC操作通常涉及以下步骤:加载驱动、建立数据库连接、创建Statement或PreparedStatement对象、执行SQL、处理结果集、关闭资源。这个过程繁琐且容易出错,尤其是在...

    Spring JdbcTemplate 常用方法整理

    这些方法通常会返回一个受影响的行数或结果集。例如: 1. `update(String sql, Object... args)`:用于执行更新操作,如INSERT、UPDATE和DELETE。`args`参数可以用来占位符替换,避免SQL注入问题。 2. `query...

    JDBCTemplate相关jar包4.3.7

    在Java应用开发中,尤其是在企业级应用中,JDBCTemplate扮演了重要的角色,因为它提供了事务管理、异常转换、结果集处理等功能,极大地提升了开发效率。 JDBCTemplate的核心思想是将SQL语句和执行逻辑分离,通过预...

Global site tag (gtag.js) - Google Analytics