大家帮忙看看有没有哪里可以改进或者有没有bug。
谢谢~package com.miracle.dao;import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
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.sql.Types;
import java.util.ArrayList;
import java.util.List;import org.apache.log4j.Logger;import com.miracle.base.DBPool;
import com.miracle.entity.CV;
import com.miracle.entity.User;/**
 * 数据库操作通用类
 * @author hyliu
 *
 */public class BaseDAO { private static Logger log = Logger.getLogger(BaseDAO.class); /**
 * 执行SQL 增 删 改 操作
 * @param sql 增 删 改 语句
 * @param param 参数
 * @return  受影响的行数
 */
public int executeSql(String sql, String... param) {
int res = 0; //受影响的行数
Connection conn = DBPool.getInstance().getConnection();
PreparedStatement pstmt = null;
try {
//得到数据库连接
//创建SQL 指令执行连接对象
pstmt = conn.prepareStatement(sql);
//循环设置参数
if (param != null) {
for (int i = 0; i < param.length; i++) {
pstmt.setString(i + 1, param[i]);
}
}
//执行增 删  改 返回受影响的行数
res = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage());
} finally {
//关闭所有资源
DBPool.getInstance().close(pstmt, null, conn);
}
//返回受影响的行数
return res;
} /*** 
 * 
 * 通用数据库查询方法
 * 需要使用JavaBean,Bean的属性需要和数据表的命名相同
 * 
 * @param clazz
 * @param sql
 * @param params
 * @return list<Object>
 */ public List<Object> getObjects(Class clazz, String sql, String... params) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException { List<Object> res = new ArrayList<Object>();
Connection conn = DBPool.getInstance().getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
try { pstmt = conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i + 1, params[i]);
}
rs = pstmt.executeQuery(); String[] colNames = getColNames(rs); Field[] fields = clazz.getDeclaredFields();

while (rs.next()) {
Object obj = clazz.newInstance();
for (int i = 0; i < colNames.length; i++) { String colName = colNames[i];
for (int j = 0; j < fields.length; j++) {
// System.out.println(fields[j]);
if (fields[j].getName().equalsIgnoreCase(colName)) {
fields[j].setAccessible(true);
fields[j].set(obj, rs.getObject(i + 1));
// System.out.println(rs.getObject(i + 1));
fields[j].setAccessible(false);
}
}

}
res.add(obj);
} } catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage());
} finally {
//关闭所有资源
DBPool.getInstance().close(pstmt, null, conn);
}
return res;
} public static String[] getColNames(ResultSet rs) throws SQLException {
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount();//查询出来列数
String[] colNames = new String[columns];
for (int i = 1; i <= columns; i++) {
colNames[i - 1] = rsmd.getColumnLabel(i);//各列名
}
return colNames;
} public static void main(String[] args) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException, ClassNotFoundException, NoSuchFieldException {
System.out.println(Class.forName("java.lang.Integer"));
System.out.println(Integer.class.isInstance(Object.class));
/*List<Object> ls = BaseDAO.getObjects(User.class, "select id,name,role from user");
for (Object obj : ls) {
System.out.print(((User) obj).getId());
System.out.print(",");
System.out.print(((User) obj).getName());
System.out.print(",");
System.out.print(((User) obj).getRole());
System.out.println();
}
List<Object> cvList = BaseDAO.getObjects(CV.class, "select * from CV limit 2");
for (Object obj : cvList) {
System.out.print(((CV) obj).getId());
System.out.print(",");
System.out.print(((CV) obj).getVersionId());
System.out.print(",");
System.out.print(((CV) obj).getItemId());
System.out.println();
}*/
// System.out.println(Types.TINYINT);
}
}