/**
* 奖结果集转变成对应的Object pojo对象,pojo中的类型定义,一定使用java.sql.datatype,当然也可以有例外
* pojo不能使用原类型:int,long,boolean等
* @param dbType 数据库类型
* @param psql 绑定执行sql
* @param pList 参数列表
* @param tclass 对应pojo的class,eg:com.cn.mypojo.UserInfo.class
* @return
*/
public static List getObjectList(Connection conn,String psql,List pList,Class tclass){
ResultSet rs = null;
PreparedStatement pst = null;
List<Object> ls = null;
try {
pst = conn.prepareStatement(psql);
if (pList != null) {
for (int i = 0; i < pList.size(); i++) {
pst.setObject(i + 1, pList.get(i));
}
}
rs = pst.executeQuery();
//取得Method
Method[] methods = tclass.getMethods();
//取得ResultSet的列名
ResultSetMetaData rsmd = rs.getMetaData();
int columnsCount = rsmd.getColumnCount();
String[] columnNames = new String[columnsCount];
for (int i = 0; i < columnsCount; i++) {
columnNames[i] = rsmd.getColumnLabel(i + 1);
}
//取得record数
ls = new ArrayList<Object>();
Method setMethod = null;
//遍历ResultSet
try {
while (rs.next()) {
//DTO[]中DTO初期化
Object tempBeanO =(Object) tclass.newInstance();
//反射, 从ResultSet绑定到JavaBean
for (int i = 0; i < columnNames.length; i++) {
//取得Set方法
String setMethodName = "set" + columnNames[i];
//遍历Method
for (int j = 0; j < methods.length; j++) {
if (methods[j].getName().equalsIgnoreCase(setMethodName)) {
Type[] paraType = methods[j].getGenericParameterTypes();
//System.out.println(paraType[0].toString());
Object value = null;
if(paraType[0].toString().toLowerCase().indexOf("long")>=0 ||paraType[0].toString().toLowerCase().indexOf("bigint")>=0)
value = rs.getLong(columnNames[i]);
else if(paraType[0].toString().indexOf("Integer")>=0)
value = rs.getInt(columnNames[i]);
else if(paraType[0].toString().indexOf("String")>=0)
value = rs.getString(columnNames[i]);
else if(paraType[0].toString().indexOf("Double")>=0)
value = rs.getDouble(columnNames[i]);
else if(paraType[0].toString().indexOf("Float")>=0)
value = rs.getFloat(columnNames[i]);
else if(paraType[0].toString().indexOf("java.sql.Date")>=0)
value = rs.getDate(columnNames[i]);
else if(paraType[0].toString().indexOf("java.util.Date")>=0)
value = new java.util.Date(rs.getTimestamp(columnNames[i]).getTime());
else if(paraType[0].toString().indexOf("Time")>=0)
value = rs.getDate(columnNames[i]);
else if(paraType[0].toString().indexOf("Timestamp")>=0)
value = rs.getTimestamp(columnNames[i]);
else if(paraType[0].toString().indexOf("BigDecimal")>=0)
value = rs.getBigDecimal(columnNames[i]);
else if(paraType[0].toString().toLowerCase().indexOf("boolean")>=0)
value = rs.getBoolean(columnNames[i]);
else if(paraType[0].toString().indexOf("Short")>=0)
value = rs.getShort(columnNames[i]);
else if(paraType[0].toString().indexOf("Byte")>=0)
value = rs.getByte(columnNames[i]);
else
value = rs.getObject(columnNames[i]);
//实行Set方法
//JavaBean内部属性和ResultSet中一致时候
setMethod = tclass.getMethod( methods[j].getName(), value.getClass());
setMethod.invoke(tempBeanO, value);
}
}
}
ls.add(tempBeanO);
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (SQLException e) {
StringBuffer bf = new StringBuffer();
bf.append("ERROR EXCEPTION getListObjects() Statement CLOSE FAIL\n"+e.getMessage());
writeLog(bf);
} finally {
release(rs,pst,conn);
}
return ls;
}
ResultSet到Pojo的映射处理方法
最新推荐文章于 2021-04-29 00:09:24 发布