利用反射机制查询数据库内数据,数据库内数据库类型为类型时

在数据库内数据类型为datetime类型,在创建实体类型属性时,属性设为Timestamp类型

/**BaseDao内容为**/

package com.lzcc.google_007.base.dao;

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 java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

/**  * @author wqj  *所有DAO实现类,定义基本的数据库访问操作  */ public class BaseDao {  private static Properties pro = null;    public static void setPro(Properties pro){   BaseDao.pro = pro;  }    /**获取连接   * @return   * @throws Exception   * @author wqj   */  protected Connection getConnection() throws Exception{   DataSource ds = BasicDataSourceFactory.createDataSource(pro);   return ds.getConnection();  }    /** 查询的方法   * @param sql 查询语句,可带“?”占位符   * @param oList “?”号占位符需要填充的值   * @param clazz  封装数据的类   * @return 以封装好数据后   * @throws Exception   * @author wqj   */  protected <T> List<T> select(String sql, List<Object> oList, Class<T> clazz) throws Exception{   // 创建返回的list集合   List<T> list = new ArrayList<T>();      Connection conn = getConnection();      PreparedStatement ps = conn.prepareStatement(sql);      // 给SQL语句中的?号赋值   for (int i = 0; oList != null && i < oList.size(); i++) {    ps.setObject(i + 1, oList.get(i));   }      // 执行查询方法   ResultSet rs = ps.executeQuery();      // 获取结果集中的元数据   ResultSetMetaData rsmd = rs.getMetaData();      // 遍历保存数据库中对应表的列名   List<String> columnList = new ArrayList<String>();   for (int i = 0; i < rsmd.getColumnCount(); i++) {    columnList.add(rsmd.getColumnName(i + 1));   }   // 循环遍历记录   while(rs.next()){// 每次获取表中对应的一条记录    // 创建封装记录的对象    T obj = clazz.newInstance();    // 遍历一个记录中的所有列    for (int i = 0; i < columnList.size(); i++) {     // 获取列名     String column = columnList.get(i);     // 根据列名创建set方法     String setMethd = "set" + column.substring(0, 1).toUpperCase() + column.substring(1);     // 获取clazz中所有方法对应的Method对象     Method[] ms = clazz.getMethods();          // 循环遍历ms     for (int j = 0; j < ms.length; j++) {      // 获取每一个method对象      Method m = ms[j];      // 判断m中对应的方法名和数据库中列名创建的set方法名是否形同      if(m.getName().equals(setMethd)){       // 反调set方法封装数据       m.invoke(obj, rs.getObject(column));// 获取rs中对应的值,封装到obj中       break; //提高效率      }     }    }    // 封装好的一条记录对应的对象放入list集合中    list.add(obj);   }   // 关闭资源   close(rs, ps, conn);      return list;  }    /** 执行增、删、改方法   * @param sql   * @param oList   * @return   * @throws Exception   * @author wqj   */  public int executeUpdate(String sql, List<Object> oList) throws Exception{   int rowCount = -1;      Connection conn = this.getConnection();      PreparedStatement ps = conn.prepareStatement(sql);      if(oList != null && oList.size() > 0){    for (int i = 0; i < oList.size(); i++) {     ps.setObject(i + 1, oList.get(i));    }   }      rowCount = ps.executeUpdate();      close(null, ps, conn);      return rowCount;     }    /**关闭资源   * @param rs   * @param ps   * @param conn   * @throws SQLException   * @author wqj   */  public void close(ResultSet rs, PreparedStatement ps, Connection conn) throws SQLException{   if(rs != null){    rs.close();    rs = null;   }   if(ps != null){    ps.close();    ps = null;   }   if(conn != null){    conn.close();    conn = null;   }  } }

转载于:https://www.cnblogs.com/hiqj/archive/2013/03/16/2962527.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值