反射的应用,jdbc封装
时间:2021-07-01 10:21:17
帮助过:4人阅读
cn.ljs;
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.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import cn.ljs.utill.Jdbcutill;
public class TestUser {
public static void main(String[] args)
throws Exception {
TestUser testUser =
new TestUser();
List list = testUser.rowToBean("select * from dept", Dept.
class);
for (
int i = 0; i < list.size(); i++
) {
Dept dept =
(Dept)list.get(i);
System.out.println(dept);
}
}
public List rowToBean(String sql,Class cls)
throws Exception{
List list =
new ArrayList<>
();
//调用自定义的方法,加载数据库,创建数据库的连接对象
Connection conn =
Jdbcutill.getConnection();
//创建预编译对象,结果集对象
PreparedStatement ps=
null;
ResultSet rs =
null;
ps =
conn.prepareStatement(sql);
rs =
ps.executeQuery();
// 每一个rs对象都对应一个ResultSetMetaData对象
ResultSetMetaData metaData =
rs.getMetaData();
// 获取查询的列数
int count =
metaData.getColumnCount();
//遍历
while(rs.next()){
Object object =
cls.newInstance();
for (
int i = 0; i < count; i++
) {
//获取第几列的名字
String fieldName = metaData.getColumnName(i+1
).toLowerCase();
//通过类名获取类中的属性的描述
Field field =
cls.getDeclaredField(fieldName);
//通过类名,拼接的方法名,属性描述的类型获取set方法
Method method =
cls.getDeclaredMethod(getSetMethodName(fieldName),field.getType());
//通过结果集获取数据库中的属性值
Object objval =
rs.getObject(fieldName);
//执行setfangfa(需要类的对象名,数据库的属性值)
if (objval !=
null) {
if (objval
instanceof Number) {
if (field.getType().getName().equals("int"
)
|| field.getType().getName().equals("java.lang.Integer"
)) {
method.invoke(object, rs.getInt(fieldName));
} else if (field.getType().getName().equals("long"
)
|| field.getType().getName().equals("java.lang.Long"
)) {
method.invoke(object, rs.getLong(fieldName));
} else if (field.getType().getName().equals("double"
)
|| field.getType().getName().equals("java.lang.Double"
)) {
method.invoke(object, rs.getDouble(fieldName));
} else if (field.getType().getName().equals("short"
)
|| field.getType().getName().equals("java.lang.Short"
)) {
method.invoke(object, rs.getShort(fieldName));
} else if (field.getType().getName().equals("byte"
)
|| field.getType().getName().equals("java.lang.Byte"
)) {
method.invoke(object, rs.getByte(fieldName));
} else if (field.getType().getName().equals("float"
)
|| field.getType().getName().equals("java.lang.Float"
)) {
method.invoke(object, rs.getFloat(fieldName));
}
} else {
method.invoke(object, objval);
}
}
//关闭资源
}
list.add(object);
}
Jdbcutill.close(conn, ps, rs);
return list;
}
//拼接set方法名
public String getSetMethodName(String fieldName){
return "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1
);
}
}
反射的应用,jdbc封装
标签:throws void from rop field set pac except state