Java反射
来源:互联网 发布:淘宝csv数据包下载 编辑:程序博客网 时间:2024/04/29 11:36
二、哪里用到反射机制
三、反射机制的优点与缺点
四、利用反射机制能获得什么信息
五、用反射机制能干什么事
六、用反射机制实现对数据库数据的增、查例子
- package
cn.netjava.pojo; -
- public
class UserInfo { - private
int id; - private
String name; - private
String pwd; - private
int age; -
- @Override
- public
String toString() { -
"UserInfo [id=" + ",id + name=" + ",name + pwd=" + ",pwd + age=" -
+ age + - }
- public
int getId() { -
id; - }
- public
void setId( intid) { -
= id; - }
- public
String getName() { -
name; - }
- public
void setName(String name) { -
= name; - }
- public
String getPwd() { -
pwd; - }
- public
void setPwd(String pwd) { -
= pwd; - }
- public
int getAge() { -
age; - }
- public
void setAge( intage) { -
= age; - }
-
- }
2、编写获得数据库连接的工厂类:
- package
cn.netjava.factory; -
- import
java.sql.Connection; - import
java.sql.DriverManager; -
- public
class Connect2DBFactory { -
static Connection getDBConnection() { -
Connection conn = -
{ -
Class.forName( -
String url = -
String user = -
String password = -
conn = DriverManager.getConnection(url, user, password); -
} (Exception e) { -
e.printStackTrace(); -
} -
-
conn; -
}
}
- package
cn.netjava.session; -
- import
java.lang.reflect.Field; - import
java.lang.reflect.Method; - import
java.sql.Connection; - import
java.sql.PreparedStatement; - import
java.sql.ResultSet; - import
java.sql.SQLException; - import
java.sql.Statement; - import
java.util.ArrayList; - import
java.util.List; -
- import
cn.netjava.factory.Connect2DBFactory; - import
cn.netjava.pojo.UserInfo; -
- public
class NetJavaSession { -
-
static String getSaveObjectSql(Object object) { -
定义一个sql字符串 -
String sql = into ;" -
得到对象的类 -
Class c = object.getClass(); -
得到对象中所有的方法 -
Method[] methods = c.getMethods(); -
得到对象中所有的属性 -
Field[] fields = c.getFields(); -
得到对象类的名字 -
String cName = c.getName(); -
从类的名字中解析出表名 -
String tableName = cName.substring(cName.lastIndexOf( + 1, -
cName.length()); -
sql += tableName + -
List mList = ArrayList(); -
List vList = ArrayList(); -
(Method method : methods) { -
String mName = method.getName(); -
(mName.startsWith( "get")&& "getClass"))!mName.startsWith( { -
String fieldName = mName.substring( mName.length()); -
mList.add(fieldName); -
System.out.println( + fieldName); -
{ -
Object value = method.invoke(object, -
System.out.println( + value); -
(value instanceofString) { -
vList.add( + "\"");value + -
System.out.println( + value); -
} { -
vList.add(value); -
} -
} (Exception e) { -
e.printStackTrace(); -
} -
} -
} -
( inti 0;= i < mList.size(); i++) { -
(i 1)< mList.size() - { -
sql += mList.get(i) + -
} { -
sql += mList.get(i) + values(" ; -
} -
} -
( inti 0;= i < vList.size(); i++) { -
(i 1)< vList.size() - { -
sql += vList.get(i) + -
} { -
sql += vList.get(i) + -
} -
} -
-
sql; -
} -
-
static List intgetDatasFromDB(String tableName, Id) { -
-
null; -
-
} -
-
-
int saveObject(Object object) { -
Connection con = Connect2DBFactory.getDBConnection(); -
String sql = getSaveObjectSql(object); -
{ -
Statement statement=(Statement) con.createStatement(); -
PreparedStatement psmt = con.prepareStatement(sql); -
psmt.executeUpdate(); -
1; -
} (SQLException e) { -
e.printStackTrace(); -
0; -
} -
} -
-
-
Object intgetObject(String className, Id) { -
得到表名字 -
String tableName = className.substring(className.lastIndexOf( + 1, -
className.length()); -
根据类名来创建Class对象 -
Class c = -
{ -
c = Class.forName(className); -
-
} (ClassNotFoundException e1) { -
-
e1.printStackTrace(); -
} -
拼凑查询sql语句 -
String sql = * from " + "tableName + where Id=" + Id; -
System.out.println( + sql); -
获得数据库链接 -
Connection con = Connect2DBFactory.getDBConnection(); -
创建类的实例 -
Object obj = -
{ -
-
Statement stm = con.createStatement(); -
得到执行查寻语句返回的结果集 -
ResultSet set = stm.executeQuery(sql); -
得到对象的方法数组 -
Method[] methods = c.getMethods(); -
遍历结果集 -
(set.next()) { -
obj = c.newInstance(); -
遍历对象的方法 -
(Method method : methods) { -
String methodName = method.getName(); -
如果对象的方法以set开头 -
(methodName.startsWith( "set")){ -
根据方法名字得到数据表格中字段的名字 -
String columnName = methodName.substring( -
methodName.length()); -
得到方法的参数类型 -
Class[] parmts = method.getParameterTypes(); -
(parmts[ 0]== class)String. { -
如果参数为String类型,则从结果集中按照列名取得对应的值,并且执行改set方法 -
method.invoke(obj, set.getString(columnName)); -
} -
(parmts[ 0]== int.class){ -
method.invoke(obj, set.getInt(columnName)); -
} -
} -
-
} -
} -
-
} (Exception e) { -
e.printStackTrace(); -
} -
obj; -
} - }
- package
cn.netjava.tester; -
- import
cn.netjava.pojo.UserInfo; - import
cn.netjava.session.NetJavaSession; -
- public
class Tester { -
static void main(String args[]) { -
-
NetJavaSession session = NetJavaSession(); -
-
UserInfo user = UserInfo(); -
-
user.setId( -
user.setAge( -
user.setPwd( -
user.setName( -
-
String sql = session.getSaveObjectSql(user); -
System.out.println( + sql); -
-
UserInfo userInfo = (UserInfo) session.getObject( -
6988); -
System.out.println( + userInfo); -
-
} - }
5、打印出来的结果:
七、总节一下
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- UVA11437
- 智能搜索助理MEER(觅尔)开发前期市场调查问卷
- 神奇的东西
- UVA11646
- NYOJ 36 LCS 最长公共子序列
- Java反射
- NYOJ 17
- javascript表单验证大全
- NYOJ 79
- android build (可参考之建立android编译环境)
- 深入理解JavaScript中的this关键字
- HDU 1234(开门人和关门人-scanf解决带注释数字读入)
- UVA 10081 Tight Words
- 工程师文化和个人发展: 《打造facebook》读后感