package com.dao;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.common.GetConnection;
import com.pojo.Person;
public class SqlDaoImpl {
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
static{
conn = GetConnection.getConn();
}
public void insert(Object object) throws Exception{
//fields[i].getName()//返回此 Field 对象表示的字段的名称。
//fields[i].getType()//返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型
//fields[i].get(object).toString();//获得对象值
//利用反射机制获得对象的全部信息
Field[] fields = object.getClass().getDeclaredFields();
System.out.println("获得对象所有属性名。。。。。。。。");
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
System.out.println(name);
}
System.out.println("获得对象所有属性被声明的类型。。。。。。。。");
for (int i = 0; i < fields.length; i++) {
String type = fields[i].getType().toString();
System.out.println(type);
}
System.out.println("获得对象所有属性所对应的值。。。。。。。。");
for (int i = 0; i < fields.length; i++) {
fields[i].setAccessible(true);
String value = fields[i].get(object).toString();
System.out.println(value);
}
System.out.println("获得对象所有属性所对应的类型和值。。。。。。。。");
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
String type = fields[i].getType().toString();
fields[i].setAccessible(true);
String value = fields[i].get(object).toString();
System.out.println("对象"+name+" 的类型为"+type+" 值为"+value);
}
}
public static void main(String[] args) throws Exception{
Person person = new Person();
person.setUsername("111");
person.setPassword("111");
person.setUsid(1);
SqlDaoImpl sd = new SqlDaoImpl();
sd.insert(person);
}
}
/**
备注:
Field[] fields = object.getClass().getDeclaredFields();//利用反射机制获得对象的全部信息
fields[i].getName()//返回此 Field 对象表示的字段的名称。
fields[i].getType()//返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型
fields[i].get(object).toString();//获得对象值
getFields()、getDeclaredFields(),它们分别是用来获取反射类中所有公有属性和反射类中所有的属性的方法。另外还有
getField(String)和getDeclaredField(String)方法都是用来过去反射类中指定的属性的方法,要注意的是getField方法只能取到反
射类中公有的属性,而getDeclaredField方法都能取到。
这里还用到了Field 类的setAccessible方法,它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问
,默认为false。另外Field类还有set(Object AttributeName,Object value)方法,可以改变指定属性的值。
*/