xiaoniao

BeanWaper

package ff;

import java.lang.reflect.Field;
import java.sql.Date;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import java.sql.ResultSet;
/**
 * BEAN 适用类 通过数据库结果集包装一个POJO,对它进行赋值
 * 适用于非使用ORM框架的软件
 */
public class BeanWaper {
 
 //传入的POJO对象参数
 private Object obj;
 
 //数据库结果集
 ResultSet result;
 
 //保存Field集合信息
 private Map fields = new HashMap();
 
 //预存储数据类型
 private Map propertyType = new HashMap();
 
 public BeanWaper(Object user,ResultSet result){
  System.out.println("ABC");
  this.obj = user;
  this.result = result;
  //基本常用数据类型  可能不完整
  propertyType.put("int", Integer.valueOf(0));
  propertyType.put("long", Integer.valueOf(1));
  propertyType.put("String", Integer.valueOf(2));
  propertyType.put("byte", Integer.valueOf(3));
  propertyType.put("Date", Integer.valueOf(4));
  propertyType.put("double", Integer.valueOf(5));
  
  //补充 见 getDataBaseTypeValue(arg1,arg2,arg3)
  //propertyType.put("**", Integer.valueOf(6));
  //propertyType.put("**", Integer.valueOf(7));
  
 }
 
 /**
  * @see 封装对象的字段名称和数据类型对象,供数据库取值时使用
  * @return
  */
 public Map getPropertyNamesAndType(){
  Field[] classFields = getFields();
  for(int flag = 0; flag < classFields.length; flag++ ){
   fields.put(getPropertyName(classFields[flag]),getPropertyType(classFields[flag]));
  }
  System.out.println("1.Fields信息:"+"\n"+fields.toString());
  return fields;
 }
 
 /**
  * @see 获取所有字段的域
  * @return
  */
 public Field[] getFields(){
  System.out.println("2.获取声明了的Fields信息"+"\n"+obj.getClass().getDeclaredFields().toString());
  return obj.getClass().getDeclaredFields();
 }
 
 /**
  * @see 获取指定字段域的数据类型
  * @param field指定字段域
  * @return
  */ 
 public String getPropertyType(Field field){
  StringSpilt spilt = new StringSpilt();
  String[] values = spilt.split(field.getType().toString(), ".");
  String propertyType = spilt.getLastString(values);
  System.out.println("3.获取属性类型信息:"+"\n"+propertyType);
  return propertyType;
 }
 
 /**
  * @see 通过传入属性数据类型,名称,结果集,通过匹配从结果集中取出相应数据
  * @param type
  * @param name
  * @param result
  * @return
  * @throws NumberFormatException
  * @throws SQLException
  */
 public Object getDataBaseTypeValue(String type,String name,ResultSet result) throws NumberFormatException, SQLException{
  Object obj = null;
  int flag = ((Integer)propertyType.get(type)).intValue();
  switch(flag){
  case 0 : obj = Integer.valueOf(result.getInt(name)); break;
  case 1 : obj = Long.valueOf(result.getLong(name)); break;
  case 2 : obj = String.valueOf(result.getString(name)); break;
  case 3 : obj = Byte.valueOf(result.getByte(name)); break;
  case 4 : obj = (Date)result.getDate(name); break;
  case 5 : obj = Double.valueOf(result.getDouble(name)); break;
  //补充
  //case 6 : obj = String.valueOf(result.getString(name)); break;
  }
  System.out.println("4.打印获取的数据库值信息:"+"\n"+obj);
  return obj;
 }
 
 /**
  * @see 设置指定的BEAN类的值
  * @param clazz
  * @param value
  * @param field
  */
 public void setValue(Object clazz, Object value,Field field){
  try {
   field.set(clazz, value);
  } catch (IllegalArgumentException e) {
   e.printStackTrace();
   System.out.println("5.打印异常信息如下:"+"\n"+e);
  } catch (IllegalAccessException e) {
   e.printStackTrace();
   System.out.println("6.打印异常信息如下:"+"\n"+e);
  }
 }
 
 /**
  * @see 包装指定的BEAN类,结果为传入的BEAN将拥有设定的值
  * @param result
  * @throws NumberFormatException
  * @throws SQLException
  */
 public void waperBean(ResultSet result) throws NumberFormatException, SQLException{
  Map names_types = getPropertyNamesAndType();
  Set keys = names_types.keySet();
  Iterator ite = keys.iterator();
  while(ite.hasNext()){
   String name = (String) ite.next();
   String type = (String) names_types.get(name);
   Field field = null;
   try {
    field = obj.getClass().getDeclaredField(name);
   } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println("7.打印异常信息如下:"+"\n"+e);
   } catch (NoSuchFieldException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println("8.打印异常信息如下:"+"\n"+e);
   }
   setValue(obj,getDataBaseTypeValue(type,name,result),field);  
  } 
 }
 
 //获取属性名称
 public String getPropertyName(Field field){
  return field.getName();
 }

 /**
  * 内部类  字符串分割类
  */
 public class StringSpilt {
  /**
     *
     * 分割字符串,原理:检测字符串中的分割字符串,然后取子串
     *
     * @param original 需要分割的字符串
     *
     * @paran regex 分割字符串
     *
     * @return 分割后生成的字符串数组
     *
     */   
    public String[] split(String original,String regex)   
    {
     // 取子串的起始位置       
        int startIndex = 0;       
        // 将结果数据先放入Vector中       
        Vector v = new Vector();       
        // 返回的结果字符串数组       
        String[] str = null;                       
        // 存储取子串时起始位置       
        int index = 0;       
        // 获得匹配子串的位置       
        startIndex = original.indexOf(regex);                       
        // System.out.println("0" + startIndex);                       
        // 如果起始字符串的位置小于字符串的长度,则证明没有取到字符串末尾。       
        // -1代表取到了末尾       
        while(startIndex < original.length() && startIndex != -1)           
        {           
            String temp = original.substring(index,startIndex);                                  
            // System.out.println(" " + startIndex);                                 
            // 取子串           
            v.addElement(temp);           
            // 设置取子串的起始位置           
            index = startIndex + regex.length();           
            // 获得匹配子串的位置           
            startIndex = original.indexOf(regex,startIndex + regex.length());           
        }       
        // 取结束的子串       
        v.addElement(original.substring(index));                    
        // 将Vector对象转换成数组       
        str = new String[v.size()];       
        for(int i=0;i<v.size();i++)           
        {           
            str[i] = (String)v.elementAt(i);           
        }       
         // 返回生成的数组       
        return str; 
    }
   
    /**
     * 功能描述:获取最后一个字符串
     * @author ZhouMingXing
     */
    public String getLastString(String[] values ){
     int length = values.length;
     if(length == 0){
      return null;
     }else{
      return values[length-1];
     }
    }
 }
 
 //测试用途
 public static void main(String[] args){
  MyBean user = new MyBean();  
  try {
   new BeanWaper(user,new java.sql.ResultSet()).waperBean(result);
   System.out.println("最后结果信息如下:"+"\n"+user.getId()+"  "+user.getName()+"  "+user.getNumber()+"  "+user.getMyBirthed()+"   "+user.getMyImage()+"   "+user.getPassword()+""+"");
  } catch (NumberFormatException e) {
   // TODO Auto-generated catch block
   System.out.println("9.打印异常信息如下:"+"\n"+e);
   
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   System.out.println("10.打印异常信息如下:"+"\n"+e);
  }
 }
}

posted on 2007-04-30 08:49 小鸟 阅读(246) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜