在数据库内数据类型为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;
/** * wqj *所有DAO实现类,定义基本的数据库访问操作 */
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;
/**
* wqj *所有DAO实现类,定义基本的数据库访问操作 */ public class BaseDao { private static Properties pro = null; public static void setPro(Properties pro){ BaseDao.pro = pro; } /**获取连接 * * Exception * wqj */ protected Connection getConnection() throws Exception{ DataSource ds = BasicDataSourceFactory.createDataSource(pro); return ds.getConnection(); } /** 查询的方法 * @param sql 查询语句,可带“?”占位符 * @param oList “?”号占位符需要填充的值 * @param clazz 封装数据的类 * @return 以封装好数据后 * Exception * 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 * * Exception * 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 * SQLException * 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; } } }