1. 程式人生 > >java程式碼之資料庫ResultSet轉換成javaBean

java程式碼之資料庫ResultSet轉換成javaBean

oracel資料型別跟java型別的對應

rid:java.lang.String
type_binary_double:java.lang.Double
type_binary_float:java.lang.Float
type_blob:oracle.sql.BLOB
type_clob:oracle.sql.CLOB
type_date:java.sql.Timestamp
type_long:java.lang.String
type_number:java.math.BigDecimal
type_nvarchar2:java.lang.String
type_raw:[B
type_timestamp:oracle.sql.TIMESTAMP
type_timestamp_with_local:oracle.sql.TIMESTAMPLTZ
type_timestamp_with_time:oracle.sql.TIMESTAMPTZ
type_varchar2:java.lang.String

 一個類方法:

public T handler(ResultSet rs,Class<T> clazz){
        T entity=null;
        try {
            entity=clazz.newInstance();
            ResultSetMetaData rsMetaData=rs.getMetaData();
            int columnCount=rsMetaData.getColumnCount();
            List<String> columnNameList=new ArrayList<String>();
            for (int i = 0; i < columnCount; i++) {
                columnNameList.add(rsMetaData.getColumnLabel(i + 1).toLowerCase());
            }
            
            Class<?> fieldTypeClazz=null;
            Field[] fieldArr=getWholeFields(clazz);
            for(Field field:fieldArr){
                field.setAccessible(true);
                if(columnNameList.contains(field.getName().toLowerCase())){
                    Object value = rs.getObject(field.getName());
                    fieldTypeClazz=field.getType();
                    if(value!=null){
                        Class<?> dbType = value.getClass();
                        if("java.lang.String".equals(dbType.getName())){//對應oracle的char、LONG、nvarchar2、varchar2
                        }else if("java.lang.Double".equals(dbType.getName())){//對應oracle的binary_double
                            value=Double.valueOf(value.toString());
                        }else if("java.lang.Float".equals(dbType.getName())){//對應oracle的binary_float
                            value=Float.valueOf(value.toString());
                        }else if("java.math.BigDecimal".equals(dbType.getName())){//對應oracel的number
                            if("java.lang.Integer".equalsIgnoreCase(fieldTypeClazz.getName())){
                                value = Integer.valueOf(value.toString());
                            }else if("java.lang.Long".equalsIgnoreCase(fieldTypeClazz.getName())){
                                value = Long.valueOf(value.toString());
                            }else if("java.lang.Double".equalsIgnoreCase(fieldTypeClazz.getName())){
                                value = Double.valueOf(value.toString());
                            }
                        }else if("oracle.sql.BLOB".equals(dbType.getName())){//對應oracle的BLOB
                            if("java.io.InputStream".equalsIgnoreCase(fieldTypeClazz.getName())){
                                value=rs.getBlob(field.getName()).getBinaryStream();
                            }
                        }else if("oracle.sql.CLOB".equals(dbType.getName())){//對應oracle的CLOB
                            if("java.lang.String".equalsIgnoreCase(fieldTypeClazz.getName())){
                                value=rs.getClob(field.getName()).toString();
                            }else if("java.io.Reader".equalsIgnoreCase(fieldTypeClazz.getName())){
                                value=rs.getClob(field.getName()).getCharacterStream();
                            }
                        }else if("java.sql.Timestamp".equals(dbType.getName())){//對應oralce date
                        }else if("[B".equals(dbType.getName())){
                        }else if("oracle.sql.TIMESTAMPTZ".equals(dbType.getName())//對應oralce的timestamp_with_tim
                                ||"oracle.sql.TIMESTAMPLTZ".equals(dbType.getName())//對應oralce的timestamp_with_local
                                ||"oracle.sql.TIMESTAMP".equals(dbType.getName())){//對應oracel的timestamp
                            
                            if("java.sql.Timestamp".equals(fieldTypeClazz.getName())){
                                value=rs.getTimestamp(field.getName());
                            }
                        }
                    }
                    field.set(entity, value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return entity;
    }
    
    /**
     * 獲取所以的類變數,包括該類的父類的類變數
     * @param clazz
     * @return
     */
    public Field[] getWholeFields(Class<?> clazz){
        Field[] result=clazz.getDeclaredFields();
        Class<?> superClass=clazz.getSuperclass();
        while(superClass!=null){
            Field[] tempField=superClass.getDeclaredFields();
            Field[] tempResult=new Field[result.length+tempField.length];
            for(int i=0;i<result.length;i++){
                tempResult[i]=result[i];
            }
            for(int i=0;i<tempField.length;i++){
                tempResult[result.length+i]=tempField[i];
            }
            result=tempResult;
            superClass=superClass.getSuperclass();
        }
        return result;
    }