package cn.sxt.TestClass;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import cn.sxt.model.Dept;
import cn.sxt.util.DBUtil; public class TestUser {
public static void main(String[] args) {
String sql = "select * from dept"; List list = TestUser.rows2beans(sql, Dept.class);
for (Object d : list) {
// Dept dept = (Dept)d;
System.out.println(d); }
} public static List rows2beans(String sql, Class cls) {
List list = new ArrayList<>();
// 连接数据库
Connection conn = DBUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null; try {
// 向数据库发送sql语句
ps = conn.prepareStatement(sql);
// 执行sql语句返回结果集
rs = ps.executeQuery();
// ResultSetMetaData可用于获取关于 ResultSet 对象中列的类型和属性信息的对象。
ResultSetMetaData metaData = rs.getMetaData();
// 获取查询的列数
int count = metaData.getColumnCount();
while (rs.next()) {
// 创建反射实例
Object obj = cls.newInstance();
for (int i = ; i < count; i++) {
// 获取数据库列名
String fileName = metaData.getColumnName(i + ).toLowerCase(); // 通过列名获取类中的属性的描述
Field field = cls.getDeclaredField(fileName); // 根据set方法名获取set方法对应的描述类
Method m = cls.getDeclaredMethod(getSetMethodName(fileName), field.getType()); // 判断接收的数据类型
Object object = rs.getObject(fileName);
if (object != null) {
if (field.getType().getName().equals("int")
|| field.getType().getName().equals("Object.lang.Integer")) {
m.invoke(obj, rs.getInt(fileName));
} else if (field.getType().getName().equals("long")
|| field.getType().getName().equals("Object.lang.Long")) {
m.invoke(obj, rs.getLong(fileName));
} else if (field.getType().getName().equals("short")
|| field.getType().getName().equals("Object.lang.Short")) {
m.invoke(obj, rs.getShort(fileName));
} else if (field.getType().getName().equals("double")
|| field.getType().getName().equals("Object.lang.Double")) {
m.invoke(obj, rs.getDouble(fileName));
} else if (field.getType().getName().equals("float")
|| field.getType().getName().equals("Object.lang.Float")) {
m.invoke(obj, rs.getFloat(fileName));
} else if (field.getType().getName().equals("byte")
|| field.getType().getName().equals("Object.lang.Byte")) {
m.invoke(obj, rs.getByte(fileName));
} else {
m.invoke(obj, object);
} }
}
list.add(obj); } } catch (SQLException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtil.close(conn, ps, rs);
}
return list;
} public static String getSetMethodName(String fileName) { return "set" + fileName.substring(, ).toUpperCase() + fileName.substring();
}
}
package cn.sxt.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class DBUtil {
private static String driver = "";
private static String url = "";
private static String user = "";
private static String password = ""; static {
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.propertise");
Properties pt = new Properties();
try {
pt.load(in);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
driver = pt.getProperty("driver");
url = pt.getProperty("url");
user = pt.getProperty("user");
password = pt.getProperty("password"); try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /*
* public static void main(String[] args) { System.out.println(driver);
* System.out.println(url); System.out.println(user);
* System.out.println(password);
*
* }
*/
//获取数据库连接
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
} public static void close(Connection conn, Statement ps) {
if (ps != null) {
try { ps.close(); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public static void close(Connection conn, Statement ps, ResultSet rs) {
if (rs != null) {
try {
rs.close(); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ps != null) {
try { ps.close(); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }

java反射应用的更多相关文章

  1. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  2. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  3. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  4. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  5. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  6. java反射学习之二万能EXCEL导出

    一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...

  7. java反射学习之一反射机制概述

    一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...

  8. java反射 之 反射基础

    一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  9. java反射 cglib asm相关资料

    有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...

  10. 超详细的java反射教程

    看技术博客时,看到关于java反射的博文,写的非常好.猛击下面的地址,开始java反射之旅 中文翻译地址:http://ifeve.com/java-reflection/ 英文原版地址:http:/ ...

随机推荐

  1. Ajax会自动将返回的对象属性首字母转化为小写

    今天在使用Ajax的时候遇到的问题. $.ajax({ type: "post", url: "<%=basePath%>reserd'f'w/liswe'f ...

  2. Introduction tp Operating System

    一.虚拟化 为了让用户告诉操作系统如何利用虚拟机功能,OS提供给应用程序一些接口——系统调用,也会说提供了一个标准库. CPU通过分时达到虚拟化. 内存物理模型只是一个字节数组,读写修改需要制定地址. ...

  3. 【转存】阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3

    阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3  Posted on 2016年2月10日 by  学院君 1.Apache 配置 —————————————————– vi / ...

  4. CCS的文本及字体

    1.文本 CSS 文本属性可定义文本的外观 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. 缩进文本 把 Web 页面上的段落的第一行缩进,这是一种最常用的文 ...

  5. Java_04循环结构

    1.while 循环结构 格式: while(循环条件){ } 关键字 while 后的小括号中的内容是循环条件.循环条件是一个表达式,值为布尔类型. { }大括号中的语句统称为循环操作,又称为循环体 ...

  6. Echart横坐标时间轴滑动

    主要针对于dataZoom的使用,代码如下: option = { title: { text: '未来一周气温变化', subtext: '纯属虚构' }, tooltip: { trigger: ...

  7. zabbix安装源

    使用zabbix安装源可以避免版本不同的问题,自己根据自己的需求选择对应的版本即可 http://repo.zabbix.com/zabbix/

  8. linux 域名解析

    vi /etc/hosts  中添加ip地址和域名  111.111.111.111   aa.swddjtc.cn   然后重启 /etc/init.d/network restart

  9. fiddler 按条件过滤

    使用fiddler抓包过程中最希望获取自己想要的数据,不重要的信息最希望的是过滤,如果重要和不重要的数据都展示对我们在寻找资源的时候产生了很大的干扰,所以我们需要按条件过滤: 1.启用fiddler ...

  10. Git在已有的分支上新建个人分支开发

    在Dev分支上新建一个分支(可以通过Git TE网页创建) 然后就可以从Source下拉列表中看到新建的分支(new_name1)了. 远程分支创建完成之后,就可以在本机上面使用Git GUI Her ...