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

读取类映射2

    博客分类:
  • java
 
阅读更多

读取属性及其特点

public static void main(String [] arg)
	{
		Class clazz = TestAnnotation.class;
		//testClass.get
		Map<String, FieldDescriptor> map = fieldDescriptorMap.get(clazz.getName()) ;
		if (map != null) {
			System.out.println("不是 null");
		}
		map = new HashMap<String, FieldDescriptor>();
		Class<?> c = clazz;
		Field f = null;
		FieldDescriptor fd = null;
		String propertyName = null;
		System.out.println("ObjectClass = "+Object.class.getName());
		while (c != null && !c.getName().equals(Object.class.getName())) {
			/***
			 * getPropertyDescriptors(Class c):
			 * Retrieve the property descriptors for the specified class, introspecting and caching them the first time a particular bean class is encountered.
			 * Does not work with DynaBeans.
			 */
			PropertyDescriptor[] properties = PropertyUtils.getPropertyDescriptors(c);
			for (PropertyDescriptor p : properties) {
				try {
					//获得此特性的编程名称
					propertyName = p.getName();
					System.out.println("属性名为:"+propertyName);
					/**
					 * getDeclaredField(propertyName)
					 * 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
					 * propertyName 参数是一个 String,它指定所需字段的简称。注意,此方法不反映数组类的 length 字段。
					 */
					f = c.getDeclaredField(propertyName);
					if (f != null) {
						fd = new FieldDescriptor();
						fd.setField(f);
						/**
						 * p.getReadMethod()
						 * 获得应该用于读取属性值的方法
						 */
						fd.setReadable(p.getReadMethod() != null);
						/**
						 * p.getWriteMethod()
						 * 获得应该用于写入属性值的方法
						 */
						fd.setWriteable(p.getWriteMethod() != null);
					}
					if (!map.containsKey(propertyName)) {
						map.put(propertyName, fd);
					}
				} catch (Exception e) {
				}
			}
			c = c.getSuperclass();
		}
		System.out.println("end");
		
	}

 读取属性及方法应用3

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;

import org.apache.commons.beanutils.BeanMap;
import org.apache.commons.beanutils.PropertyUtils;

import com.company.plat.persistence.util.BaseUtils;

public class BeanMapTest {
	public static void main(String[] args) {
		TestAnnotation bean = null;
		BeanMap beanMap = null;
		
		Class<?>[] methodParaTypes = null;
		Method method = null;
	 
		try {
			 bean = TestAnnotation.class.newInstance();
			 bean.setAge(11) ;
			 bean.setBirthday(new Date());
			 bean.setId(1);
			 bean.setName("测试");
			 bean.setWifeName("秘密");
			 
			 beanMap =  new BeanMap(bean);
			 
			// PropertyUtils.setProperty(record, propertyName, value);
			 PropertyDescriptor[] properties = PropertyUtils.getPropertyDescriptors(TestAnnotation.class);
			 String propertyName;
			 for(PropertyDescriptor propertie : properties )
			 {
				//获得此特性的编程名称
					propertyName = propertie.getName();
					System.out.println("属性名:"+propertyName);
					method = null;
					if (propertyName != null) {
						//获取set方法
					    method = beanMap.getWriteMethod(propertyName);
					}
					if (propertyName == null || method == null) {
					    continue;
					}
					methodParaTypes = method.getParameterTypes();
					if (methodParaTypes == null || methodParaTypes.length != 1) {
					    continue;
					}
					//判断是否是基本数据类型
					if (BaseUtils.isBaseType(methodParaTypes[0]))
					{
						System.out.println(methodParaTypes[0].getName());
					}
					
					//设置值
					//PropertyUtils.setProperty(bean, propertyName, null);
			 }
			 
			 
			 
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
	 public static <T> Object  getValueData(ResultSet rs, String column,
			    Class<T> propertyClass) throws SQLException{
		 
		 String className = propertyClass.getName();
		 Object value = null;
			if (!BaseUtils.isBaseType(propertyClass))
			    throw new SQLException("Cannot Recognise the data Type, column="
				    + column + ", type=" + className);

			if ("java.lang.String".equals(className)) {
			    value = rs.getString(column);
			} else if ("int".equals(className)
				|| "java.lang.Integer".equals(className)) {
			    value = new Integer(rs.getInt(column));

			} else if ("float".equals(className)
				|| "java.lang.Float".equals(className)) {
			    value = new Float(rs.getFloat(column));
			    
			    
			} else if ("double".equals(className)
				|| "java.lang.Double".equals(className)) {
			    value = new Double(rs.getDouble(column));
			} else if ("long".equals(className)
				|| "java.lang.Long".equals(className)) {
			    value = new Long(rs.getLong(column));
			} else if ("short".equals(className)
				|| "java.lang.Short".equals(className)) {
			    value = new Short(rs.getShort(column));
			} else if ("byte".equals(className)
				|| "java.lang.Byte".equals(className)) {
			    value = new Byte(rs.getByte(column));
			} else if ("boolean".equals(className)
				|| "java.lang.Boolean".equals(className)) {
			    value = new Boolean(rs.getBoolean(column));
			} else if ("java.util.Date".equals(className)) {
			    Timestamp t = rs.getTimestamp(column);
			    if (t == null) {
				value = null;
			    } else {
				value = new java.util.Date(t.getTime());
			    }
			} else if ("java.sql.Timestamp".equals(className)) {
			    value = rs.getTimestamp(column);
			} else if ("java.sql.Date".equals(className)) {
			    Timestamp t = rs.getTimestamp(column);
			    if (t == null) {
				value = null;
			    } else {
				value = new java.sql.Date(t.getTime());
			    }
			} else if ("java.lang.BigDecimal".equals(className)) {
			    value = rs.getBigDecimal(column);
			} else {
			    throw new SQLException("Cannot Recognise the data Type, column="
				    + column + ", type=" + className);
			}

			return value;
	 }

}

 

分享到:
评论

相关推荐

    论文研究-基于内存映射文件技术的海量影像数据快速读取方法.pdf

    随着信息技术和传感器技术的飞速发展,使得遥感图像的数据量呈几何级数的递增,而传统的利用文件指针来读取文件的方法,只能正确读取2GB以下的数据。针对此种情况,提出了新方法,并分析了其关键技术,用VC 给出了...

    file_内存映射_C++_

    `file_operation.cpp`很可能是包含实际操作内存映射文件的函数和类的实现,比如打开、关闭、读取和写入文件的操作。而`file_operation.h`则可能定义了相关的类和接口,供其他部分的代码调用,遵循C++的头文件和源...

    mysql表映射成java实体类

    MySQL是一种广泛使用的开源关系型数据库管理系统,而Java实体类则是将数据库表结构映射到编程语言中的对象,便于进行对象关系映射(ORM)。本话题将详细介绍如何通过原生JDBC连接MySQL数据库,自动获取所有表名并...

    使用 Spring LDAP 读取数据并映射到 Java Bean 中

    这篇博客文章“使用 Spring LDAP 读取数据并映射到 Java Bean 中”主要探讨了如何通过Spring LDAP来查询LDAP目录信息,并将查询结果转换为Java对象,以便在应用程序中进一步处理。 首先,`pom.xml`文件是Maven项目...

    映射读取大文件数据

    映射读取大文件数据是一种将整个文件或者文件的一部分直接映射到内存中的方法,这样可以显著提高对大文件的读写效率。这种方法的核心在于操作系统提供的文件映射功能,它允许程序将文件的内容映射为进程的虚拟地址...

    基于内存映射文件技术的海量影像数据快速读取方法.pdf

    为了有效处理和快速读取超过2GB的数据文件,研究人员提出了一种基于内存映射文件技术的海量影像数据快速读取方法。 #### 内存映射文件技术 内存映射文件技术是一种将磁盘上的文件映射到进程的虚拟地址空间中的方法...

    文件映射封装类

    在封装设计中,通常会有一个基类或者抽象类,定义通用的方法如打开、关闭、读取、写入等,然后为Windows和Linux各自实现具体的子类,继承并覆盖这些方法。这样做的好处是代码的可复用性和可维护性得到了提高,同时...

    映射文件操作封装类

    5. **read**:同样,获取映射视图的指针,然后从指定位置读取数据。 6. **expand**:当需要增加文件大小时,可能需要先调用`SetFilePointerEx`(Windows)或`lseek`(Linux)移动文件指针到末尾,然后使用`...

    键盘映射工具-更改Windows系统按键工具

    2. **选择要映射的键**:在软件中,你需要选择那个无法正常工作的键,这可能是通过直接输入按键名称,或者通过软件提供的界面元素来完成。 3. **设定映射目标**:然后,选择一个不常用的键或者是组合键(如Ctrl+Alt...

    读写内存映射数据的代码

    一段读写内存映射数据的代码,对内存映射区域进行读写操作

    java 利用内存映射读取文件后 按行进行输出

    java利用内存映射读取大文件。并且捉行输出。

    大文件读写内存映射.rar

    4. 读写操作:对于读取操作,可以直接读取映射区域的值;对于写入操作,修改映射区域的值会同步到文件中。需要注意的是,由于内存映射文件可能跨越多个页,所以部分写操作可能导致整个页被刷新到磁盘,这可能会有...

    Linux 下内存映射与分块读取速度测试程序

    使用每行的字符个数统计和 MD5 两个算法比较内存映射和分块直接读取文件的速度。

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

    反射在处理XML映射时非常有用,因为它可以动态地操作对象,无需在编译时就确定具体的类和方法。 数据库操作通常包括增删查改(CRUD)等基本操作。Java提供了JDBC(Java Database Connectivity)API来与各种数据库...

    基于内存映射文件的海量点云数据快速读取方法.pdf

    (2)通过在磁盘空间中开辟虚拟内存,省掉了由磁盘数据到内存空间的步骤,从而提高了数据读取的效率。 点云数据格式特点:点云是在同一空间参考系下表达目标空间分布和目标表面特性的海量点集合,包括三维坐标(x,...

    内存映射读写文件的方法

    2. 创建映射对象:调用CreateFileMapping函数,传入文件句柄和一些属性,如映射大小和访问权限。例如: ```cpp HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); ``` 3. 映射视图:...

    读取文件数据并解析成bean实体类

    "读取文件数据并解析成bean实体类"这一主题涉及到的核心知识点主要包括文件操作、数据解析以及对象映射。下面将详细阐述这些概念及其应用。 1. **文件操作**:文件是数据存储的基本单位,通常以二进制或文本格式...

    基于内存映射文件技术的海量影像数据快速读取方法

    - **支持大文件**:传统的文件读取方法受制于指针偏移量的限制(即32位操作系统下的2GB限制),而内存映射文件技术通过提供两个32位的参数来表示文件大小或偏移量,能够支持最大达16EB(2^64-1字节)的大文件,极大...

    内存映射读、写

    这个类可能会包含打开文件、创建内存映射视图、将文件数据映射到内存、读取映射的内存区域以及关闭文件等方法。为了确保正确读取,需要处理诸如错误检查、文件大小、映射视图大小等细节。 `MemoryMapWriter.cpp`则...

Global site tag (gtag.js) - Google Analytics