⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wrapperutil.java

📁 简单的web应用,实现基本的购物车功能,有良好的扩展性
💻 JAVA
字号:
package myjdbc.util;

import java.util.List;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.sql.SQLException;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.sql.Date;
import java.sql.Timestamp;

public final class WrapperUtil {
  private static final WrapperUtil wutil = new WrapperUtil();
  private WrapperUtil() {}
  public static WrapperUtil getInstance() {
    return wutil;
  }
  public List wrapperToObjectCol(ResultSet rs ,String sql,String tableConfigPath)throws SQLException,Exception
  {
    List result = new ArrayList();
    String[] columns = SQLParserUtil.parserSQL(sql,"select","from");
    //sql语句如果是select * from table,这样的模式,则列名数组为空
    if (columns == null) {
      String[] tables = SQLParserUtil.getTableName(sql);
      if (tables.length > 1)
        throw new SQLException("暂时只支持单表的 select * from table 的操作!");
      //table_config.xml解析
      String filePath = (tableConfigPath.endsWith("/")? tableConfigPath+tables[0]+".xml" : tableConfigPath+"/"+tables[0]+".xml");
      XMLParserUtil xmlP = new XMLParserUtil(filePath);
      //返回对象是(类名+列名+类的属性名)的组合
      Object[] obs = xmlP.getFieldAndColumnMapping(tables[0]);
      result = getObject(obs,rs,result);
    }
    else {
      int len = columns.length;
      int i = 0;
      try {
        while (rs.next()) {
          Object[] temp = new Object[len];
          while (i < len) {
            temp[i] = rs.getObject(columns[i]);
            i++;
          }
          result.add(temp);
          i = 0;
        }
      }
      catch (SQLException ex) {
        ex.printStackTrace();
      }
    }
    return result;
  }
  private List getObject(Object[] xmlParserResult,ResultSet rs,List result)
  {
    try {
      //指针往下移一行!
      String className = (String) xmlParserResult[0];
      String[] columns = (String[]) xmlParserResult[1];
      String[] fields = (String[]) xmlParserResult[2];
      int len = fields.length;
      int count = 0;
      while (rs.next()) {
        count ++;
        Object ob = Class.forName(className).newInstance();
        Class obClass = ob.getClass();
        for (int i = 0; i < len; i++) {
          //找到属性字段
          Field field = obClass.getDeclaredField(fields[i]);

          //找到该属性的set方法
          Method method = obClass.getMethod("set" +
                                            Character.toUpperCase(fields[i].
              charAt(0)) +
                                            fields[i].substring(1),
                                            new Class[] {field.getType()});
          Object notKnown = rs.getObject(columns[i]);
          String str = null;
          java.util.Date date = new java.util.Date();
//          Timestamp timestamp = null;
          Double doub =null;
          Long lon = null;
          Integer it = null;
          Float ft  = null;
          Boolean bl = null;
          if(notKnown != null) {
            if (date.getClass().isAssignableFrom(notKnown.getClass()))
            {
              date = (java.util.Date) notKnown;
             // method.invoke(ob, new Object[] {date});
              method.invoke(ob, new Object[] {date.toString()});
            }
            else if (notKnown instanceof String)
            {
              str = (String)notKnown;
              method.invoke(ob, new Object[] {str});
            }
           else if (notKnown instanceof Long)
           {
             lon = (Long) notKnown;
             method.invoke(ob, new Object[] {lon});
           }
          else if (notKnown instanceof Integer)
          {
            it = (Integer) notKnown;
             method.invoke(ob, new Object[] {it});
          }
          else if (notKnown instanceof Double)
          {
            doub = (Double)notKnown;
            method.invoke(ob,new Object[]{doub});
          }
          else if (notKnown instanceof Float)
          {
            ft = (Float) notKnown;
            method.invoke(ob,new Object[]{ft});
          }
          else if (notKnown instanceof Boolean)
          {
            bl = (Boolean)notKnown;
            method.invoke(ob,new Object[]{bl});
          }
          else ;

          }
          else
            method.invoke(ob, new Object[] {null});
          //调用set方法

        }
        result.add(ob);
      }
    }
      catch (ClassNotFoundException e) {
        e.printStackTrace();
      }
      catch (Exception es) {
        es.printStackTrace();
      }
    return result;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -