`
lin358
  • 浏览: 62292 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

通过反射读取数据库

    博客分类:
  • j2se
阅读更多
1.查询数据库
public <T> List<T> Select(String sql, Class<T> mode){
		
		List<T> reList = new ArrayList<T>();
		T reT = null;
		ResultSet rs = null;
		ResultSetMetaData rsd;
		try {
			
			rs = this.conn.createStatement().executeQuery(sql);
			
			int columnCount = 0;
			while(rs.next()){
				
				Map<String, Object> map = new HashMap<String, Object>();
				
				rsd = rs.getMetaData();
				columnCount = rsd.getColumnCount();
				
				for (int i = 1; i <= columnCount; i++) {
					map.put(rsd.getColumnName(i), rs.getObject(i));
				}
				
				reT = mode.newInstance();
				for(Map.Entry<String, Object> ent:map.entrySet()){
					ReflectionUtils.setFieldValue(reT, ent.getKey(), ent.getValue());
				}
				
				reList.add(reT);
				
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
				}
			}
		}
		
		return reList;
		
	}


2.通过反射取值(核心代码)
	/**
	 * 直接设置对象属性值, 忽略 private/protected 修饰符, 也不经过 setter
	 * 
	 * @param object
	 * @param fieldName
	 * @param value
	 */
	public static void setFieldValue(Object object, String fieldName, Object value) {
		Field field = getDeclaredField(object, fieldName);

		if (field != null) {

			makeAccessible(field);

			try {
				field.set(object, value);
			} catch (Exception e) {
			}

		}

	}

	/**
	 * 使 filed 变为可访问
	 * 
	 * @param field
	 */
	public static void makeAccessible(Field field) {
		if (!Modifier.isPublic(field.getModifiers())) {
			field.setAccessible(true);
		}
	}

	/**
	 * 循环向上转型, 获取对象的 DeclaredField
	 * 
	 * @param object
	 * @param filedName
	 * @return
	 */
	public static Field getDeclaredField(Object object, String filedName) {

		for (Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) {
			try {
				return superClass.getDeclaredField(filedName);
			} catch (NoSuchFieldException e) {
				// Field 不在当前类定义, 继续向上转型
			}
		}
		return null;
	}


3.调用示例
List<Mode> modeList = (List<Mode>) oracleAPI.Select(sql, Mode.class);


4.模型
package Modes;

public class Mode {

	private String NAME;
        private BigDecimal ID;  //数字要用这个 int无法赋值 oracle number字段

	public void setNAME(String NAME) {
		NAME= NAME;
	}

	public String getNAME() {
		return NAME;
	}
	
        public void setID(BigDecimal ID) {
		ID= ID;
	}

	public String getID() {
		return ID;
	}

}
分享到:
评论

相关推荐

    Java 反射读取配置文件及反射类

    这个工程是使用 java 来使用反射的原理读取 *.proproies 资源文件中的一些配置信息。利用此方法可以在没有使用框架的情况下...如:可以将一些数据库配置信息,重要信息写入到资源文件中,在使用反射来读取这些信息。

    利用JAVA反射,读取数据库表名,自动生成对应实体类的操作

    主要介绍了利用JAVA反射,读取数据库表名,自动生成对应实体类的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    C#读取SQL数据库,生成SQL语句,系统源码

    C#读取SQL数据库,生成SQL语句; 可以是2000、2005的库,为了简单,写在了一个ini文件里,就是数据库的链接字符串,任意修改,点击运行即可; 自己写着用的,纯SQL语句,字段太多了,就写着太费劲了,闲来无事,就写...

    IOS 反射属性 自动插入到数据库 读取 修改 删除(New)

    UIImage 转为 NSData 以 bytes 模式 直接插入到 数据库 正在做 可设置模式 数据库保存图片名称 图片放在document 目录下 NSData 目前也是 直接插入到数据库 后面可能会跟图片一样处理 数据库 只保存名称 ...

    读取Bean类自动创建数据库

    使用反射技术获取Bean类信息,使用Microsoft SQL Server Compact Edition数据库,使用VS2008编程工具。

    C# SQL Server数据库操作DLL

    C# SQL Server数据库操作DLL,提供数据库链接、读取DataSet、DataTable,执行添加、修改、删除数据。附源码项目和dll文件

    vb.net界面,用Treeview读取数据库数据,自动下拉菜单,点击打开窗口

    利用Treeview自动生成菜单,利用反射在Tabcontrol中产生NewTabPage,打开窗口内容。在NewTabPage上画出关闭按钮,点击关闭。

    IOS 反色属性 自动插入到数据库 读取 修改 删除

    IOS 反色属性 自动插入到数据库 读取 修改 删除 http://blog.csdn.net/li6185377/article/details/8191788

    利用反射动态加载dll

    C#,利用反射动态加载dll。dll需要在sql server数据库里面进行维护,加载的时候先去读取数据库里面的信息,查到dll的名称。并根据名称去程序里面直接去抓取,并显示在界面上

    java框架知识点汇总(反射,XML,设计模式,Redis缓存数据库)

    整理了框架底层是按技术(包括反射,XML,设计模式)及Redis缓存数据库技术。 Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法...

    支持多数据库的ORM框架ef-orm.zip

    从数据库元数据访问,到建表,创建约束,创建sequence等各种DDL操作进行了封装,用户无需编写各种SQL,可以直接通过API操作数据库结构。 尤其是ALTER TABLE等修改数据库的语句,各种不同的RDBMS都有较大语法差异。...

    jdbc连接数据库(jndi连接池)

    使用反射,简单工厂模式实现jdbc数据库操作,支持三种数据库oracle10g,mysql,sqlsever,作了简单的jndi操作,以及xml读取的应用,喜欢反射的同学可以看看

    布扣数据字典生成器 V1.0

    1、SQL Server:针对SQL Server的数据反射,该方式可以读取数据库内表(字段)的描述,如果你用的是SQL Server建议采用该方式 2、OLE DB: 支持OLE DB方式连接大部份数据库 注意:1、请先解压缩后运行,否则可能出错 2...

    ztt-koa:我的koa包,集成了ts,使用了装饰器的特性,mysql数据库,自动读取路由

    我的koa包,集成了ts,使用了装饰器的特性,mysql数据库,自动读取路由 中间件 首先理解一点:中间件一定是一个函数,通过app.use(xxx)来调用中间件, use的顺序也会影响中间件的执行 log4js 这是日志中间件,做日志...

    Java反射机制与框架原理

    * 使用反射机制,读取Class中的字段信息 * 使用反射机制,对Class中的方法进行调用 * 以JSON与POJO的转换为例,演示反射机制的运用 * 自定义注解的语法 * 使用反射机制,读取类中的注解信息 * 以反射和注解...

    Servlet实现MVC源码 ServletMVC.rar

    ServletMVC源码 源码描述: 一、源码介绍 通过java的反射技术实现... 自定义注解,dom4j读取配置文件,反射读取路由,实现了登录功能的逻辑,对理解MVC原理有一定帮助 三、注意事项 开发环境为jdk1.8,无数据库

    WebService 查询数据库得到datatable的序列化和反序列的例子

    做一个WebService,把前台和后台分离开,在ebService上得到数据是datatable,利用序列化转换成xml进行传输,再在客户端反序列化成datatable,在其中用到了反射,自定义属性等

    图书管理系统源码20130807

    3、抽象工厂设计模式加反射技术来创建数据库访问层接口,可以扩展完全支持多种数据库, 现在可以完全支持SQL Server和Access数据库,序列化技术来保存和读取配置,更加方便实用 4、在操作表格记录的时候可以选择多...

    图书管理系统源码20110803_0

    3、抽象工厂设计模式加反射技术来创建数据库访问层接口,可以扩展完全支持多种数据库, 现在可以完全支持SQL Server和Access数据库,序列化技术来保存和读取配置,更加方便实用 4、在操作表格记录的时候可以选择多...

    Java三大框架面试题.docx

    hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

Global site tag (gtag.js) - Google Analytics