SQL查询数据封装JavaBean对象

public static List getListBySql(String sql, Class cls){
  List list = new ArrayList();
  Connection connection =null;
  Statement stmt =null;
  ResultSet rs =null;
  try {
   connection = getConnection();
   stmt = connection.createStatement();
   rs = stmt.executeQuery(sql);
   while (rs.next()) {
    Object obj = getObject(rs, cls);
    list.add(obj);
   }
  }catch (Exception e) {
   e.printStackTrace();
   String sWord = " sql:" + sql;
   sWord += " 错误信息:" + e.getLocalizedMessage();
   PayMd5Utils.logResult(logpath,sWord);
   throw new RuntimeException("#执行出错:"+e.getLocalizedMessage());
  }finally{
   closeResultSet(rs);
   closeStatement(stmt);
   closeConnection(connection);
  }
  return list;
 }

 private static Object getObject(ResultSet rs, Class cls) throws SQLException, IllegalArgumentException, IllegalAccessException, InstantiationException {
  Object object = null;
  Field[] fields = cls.getDeclaredFields();
  ResultSetMetaData metaData = rs.getMetaData();
  int columnCount = metaData.getColumnCount();
  for (int i = 1; i <= columnCount; i++) {
   String columnName = metaData.getColumnName(i);
   Field field = getField(fields, columnName);
   if (field != null) {
    if (object==null) {
     object=cls.newInstance();
    }
    field.setAccessible(true);
    Object value = rs.getObject(field.getName());
    setFieldValue(object, value, field);
   }
  }
  return object;
 }

 private static Field getField(Field[] fields, String columnName) {
  for (Field field : fields) {
   if (columnName.toUpperCase().equals(field.getName().toUpperCase())) {
    return field;
   }
  }
  return null;
 }

 private static void setFieldValue(Object obj, Object value, Field field)
   throws IllegalArgumentException, IllegalAccessException {
  if (value == null) {
   return;
  }
  if (field.getType() == Long.class) {
   field.set(obj, StringUtil.toLong(value));
  } else if (field.getType() == Double.class) {
   field.set(obj, StringUtil.toDouble(value));
  } else if (field.getType() == Integer.class) {
   field.set(obj, StringUtil.toInteger(value));
  } else if (field.getType() == Date.class) {
   field.set(obj, new Date());
  } else {
   field.set(obj, StringUtil.toString(value));
  }
 }

 

posted @ 2013-06-17 21:23  爱生活,爱编程  阅读(670)  评论(0编辑  收藏  举报