`
lin358
  • 浏览: 63981 次
  • 性别: 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反射读取数据库表名自动生成对应实体类的操作 标题分析: 该标题主要介绍了利用JAVA反射机制,读取数据库表名,并自动生成对应的实体类的操作。这种操作可以自动根据表名生成实体类,具有很好的参考价值和...

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

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

    通过Java annotation以及反射机制实现不同类型通用的数据库访问接口

    然后,我们可以通过反射获取这些注解信息,动态地创建SQL语句并执行相应的CRUD(创建、读取、更新、删除)操作。 以下是一个简单的例子: ```java // 自定义注解 @Retention(RetentionPolicy.RUNTIME) @Target...

    OA程序事例

    例如,系统可以通过反射读取数据库连接字符串,并根据这些信息动态建立数据库连接。此外,反射也可以用于动态调用方法,比如根据用户权限动态执行某些操作。 再者,缓存机制是提高程序性能的关键手段。在OA程序中,...

    JAVA通过实体生成数据库表

    在实体类生成数据库表的过程中,反射被用来读取实体类的元数据,如字段名、类型等,然后根据这些信息构建出创建数据库表的SQL语句。 在实际应用中,我们可能使用Hibernate的`Hibernate Tools`或者MyBatis的`MyBatis...

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

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

    .Net中利用反射通过简单工厂模式实现对不同数据库的访问

    总结起来,通过在.NET中结合反射和简单工厂模式,我们可以构建灵活的代码,以适应不同的数据库环境,而无需硬编码特定的数据库访问逻辑。这种做法提高了代码的可扩展性和可维护性,对于多数据库支持的应用来说非常...

    基于Java实现的一个用于生成代码、创建或读取数据库表信息的工具包

    在数据库管理方面,ScrewDriver提供了读取数据库表信息的功能。它可以列出数据库中的所有表,包括字段名、数据类型、主键等信息,帮助开发者快速了解数据库结构。此外,它还可能支持创建新的数据库表,或者修改现有...

    如何操作Excel读取数据导入DB2数据库

    为了解决这个问题,我们可以考虑实现一个通用转换类,例如使用Java中的反射机制来动态读取Excel文件的元数据,并根据元数据生成对应的SQL语句来将Excel数据导入到数据库中。 Excel读取数据导入DB2数据库需要使用POI...

    java 解析xml类映射数据库 数据库操作 反射机制 源码

    本程序集的核心是利用Java解析XML文件,将XML中的数据映射到数据库,并通过反射机制进行数据库操作。下面将详细阐述这些知识点。 首先,XML解析在Java中通常有两种方式:DOM(Document Object Model)和SAX(Simple...

    读取Bean类自动创建数据库

    标题中的“读取Bean类自动创建数据库”是指在软件开发中,通过编程方式解析Java Bean类的信息,并利用这些信息自动生成对应的数据库结构。这通常涉及到Java的反射机制和数据库操作技术。 首先,Java反射机制是Java...

    Java直接通过连接数据库生成对应的Resful格式的API

    - Read:读取,对应SELECT语句,用于获取数据库中的数据。 - Update:更新,对应UPDATE语句,用于修改表中的已有数据。 - Delete:删除,对应DELETE语句,用于从表中移除数据。 实现这一功能可能涉及到的技术和概念...

    反射技术压缩和修复Access数据库(没有依赖)

    总结来说,"反射技术压缩和修复Access数据库(没有依赖)"是一个利用C++的.NET特性,通过反射动态操作Access数据库,实现无额外库依赖的数据库压缩和修复程序。这种技术的应用展示了.NET Framework的强大功能,同时也...

    反射+annotation 完成数据库连接

    综上所述,通过Java的反射和注解技术,我们可以实现动态地读取数据库连接信息,并在运行时创建和管理数据库连接。这种方式既保持了代码的灵活性,又简化了配置管理,是Java开发中的一个高级技巧。在实际应用中,可能...

    C#读取数据库返回泛型集合详解(DataSetToList)

    本篇文章主要探讨如何在C#中通过使用`DataSet`对象来读取数据库,并将其转换为泛型集合,如`List&lt;T&gt;`。 首先,我们来看一个基本的示例代码,它演示了如何从数据库获取数据并将其绑定到一个`GridView`控件上。`Page_...

    基于反射+配置文件动态选择数据库

    在Java编程中,"基于反射+配置文件动态选择数据库"是一种常见的高级技术,它结合了反射、配置文件读取和数据库连接管理等多个核心概念。这种技术主要用于构建灵活、可扩展的应用程序,允许根据运行时环境或用户需求...

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

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

    反射机制与抽象工厂结合多数据库模型源码.zip

    3. 使用反射加载数据库驱动和创建工厂:通过`Class.forName()`加载JDBC驱动,然后创建相应数据库的工厂实例。 4. 创建数据库连接:调用工厂实例的方法,如`createConnection()`,获取数据库连接。 5. 配置文件:存储...

    抽象工厂访问不同的数据库(反射+缓存)

    通过缓存先前查询的结果,我们可以避免重复的数据库交互,尤其是对于那些计算密集型或读取频繁的操作,缓存可以显著提升响应速度。 博客文章可能深入探讨了以下几点: 1. 如何定义抽象工厂接口,以及如何设计数据库...

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

    通过这个项目,开发者可以学习到如何结合数据库和控件来构建动态的用户界面,以及如何利用反射来实现更灵活的代码设计。同时,这也是对事件处理、控件操作和图形绘制等多个VB.NET核心概念的实际应用。

Global site tag (gtag.js) - Google Analytics