利用反射机制从数据库中获取数据,提高代码的可修改性
来源:互联网 发布:百度云盘mac版下载 编辑:程序博客网 时间:2024/05/24 05:21
Oracle数据库中有多个表:Products,category等。
现在要连接数据库,获取Products表中的数据
1.写一个BaseDao用于连接数据库
package D0816;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
public static final StringDRIVER ="oracle.jdbc.OracleDriver";
public static final StringURL ="jdbc:oracle:thin:@localhost:1521:orcl";
public static final StringUSER_NAME ="lsh";
public static final StringUSER_PWD ="123456";
protectedConnectionconn = null;
protectedPreparedStatementps = null;
protectedResultSetrs = null;
static {
try {
Class.forName(DRIVER);
} catch(ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Connection getConn() {
try {
conn =DriverManager.getConnection(URL,USER_NAME, USER_PWD);
} catch(SQLException e) {
e.printStackTrace();
}
returnconn;
}
voidcloseConn() {
try {
if (rs !=null) {
rs.close();
}
if (ps !=null) {
ps.close();
}
if (conn !=null) {
conn.close();
}
} catch(SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.写一个CommonDao,其中有一个executeQuery方法来执行sql语句并返回执行的结果集,由于获取数据时,要查找的表格和要显示的表格和属性值会是变量,对应的pojo类和sql语句会是变量。
package D0816;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
publicclass CommonDao extends BaseDao{
//传入sql语句与要查询的表格对应的pojo类
public List executeQuery(String sql,Class clazz){
List lst =new ArrayList<>();
super.getConn();//连接数据库
try{
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
Object o = clazz.newInstance();//利用反射机制实例化对象
Field[] fl= clazz.getDeclaredFields();//获取对象的属性
for(int i= 0;i<fl.length;i++){//轮流对每个属性值进行赋值
fl[i].setAccessible(true);
Object value = rs.getObject(fl[i].getName());//从数据库中获取的相应属性的值,由于类型不确定,使用Object
//由于数据库中的number类型是BigDecimal的,所以获取到的value是BigDecimal类型的,但是pojo中的数字定义成了Integer或Double属性。属性不同不能直接赋值,所以需要进行判断,将value的相应的转换成Integer或Double之后再输出
if(fl[i].getType()==Integer.class&&value.getClass()==java.math.BigDecimal.class){
BigDecimal v= (BigDecimal)value;
fl[i].set(o,v.intValue());
}elseif(fl[i].getType()==Double.class&&value.getClass()==java.math.BigDecimal.class){
BigDecimal v= (BigDecimal)value;
fl[i].set(o, v.doubleValue());
}else{
fl[i].set(o, value);
}
}
lst.add(o);
}
}catch (SQLException| InstantiationException | IllegalAccessException e){
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
super.closeConn();
}
return lst;
}
}
3.最后利用一个ProductsDao写要执行的sql语句和要查找的表格对应的pojo类,作为2中写好的CommonDao的executeQuery方法的参数去执行
package D0816;
import java.util.List;
publicclass ProductsDao extends CommonDao{
public List<Products> productsQuery(){
String sql ="select * fromproducts";
returnsuper.executeQuery(sql,D0816.Products.class);
}
}
后期需要查找其他表格或要进行其他操作,只需修改CommonDao类中CommonDao的参数即可
- 利用反射机制从数据库中获取数据,提高代码的可修改性
- ajax从数据库获取数据的代码
- Android中利用反射机制创建实例的代码
- ListView 利用CursorAdapter 和 LoaderManager从数据库中获取数据
- 利用反射机制从DB取数据转化为Entity的全过程
- 从配置文件读取数据连接信息,利用泛型和java反射机制,写一个公共的增删改查数据库操作类
- 利用反射获取SQL数据库的对象
- 如何利用反射获取字段的数据
- Java中,利用反射机制修改定义出来的String对象本身。
- 从数据库读取数据后利用反射为对应的实体类的属性赋值
- 如何提高程序的可修改性
- 利用ADO从数据库的表中提取数据
- android中利用Java反射机制获取系统相机对象
- 利用java反射机制获取一个类中信息
- 从配置文件中获取类名,利用反射创建对象
- 利用.net反射机制修改对象的私有变量
- 利用IDC从数据库中取得数据
- 修改现有代码提高其可重用性
- ajax异步获取数据后动态向表格中添加数据(行)
- explicit
- Yii事务实战
- hdu 2774(滑动窗口)
- 浅谈IT行业加班现象
- 利用反射机制从数据库中获取数据,提高代码的可修改性
- 如何理解v-model就是语法糖?
- nginx---rewrite
- JavaScript之BOM的五类对象简介
- 搭建Ubuntu基本环境
- 总有你值得一试的python开源项目
- 【HIbernate】(五)关联映射之多对一映射
- 融云利用自定义消息的方式发送自定义表情
- TCP那些事儿(3)