当前位置:编程学习 > JAVA >>

将任意查询结果ResultSet转化成List<Map>

  在JadePool中,提供了若干个查询方法,分别是:
                public List query(String sqlquery, int position, int length, boolean isScrollSenstive) throws SQLException
                public List query(String sqlquery, int timeout) throws SQLException
                public List query(String sqlquery) throws SQLException
        它们支持任意复杂的SQL查询,只要受DBMS支持,只要没有语法错误均可。
        在这些方法中,每次完成ResultSet到List<Map>的转换后,立即关闭了ResultSet对象,它们均调用底层的核心方法
                private void _recordMappingToMap(String fieldClassName, String fieldName, ResultSet rs, Map fieldValue) throws SQLException
        在_recordMappingToMap中的参数Map fieldValue可以理解成Java的接口指针。
        在早期设计PVO时,我始终认为SQL语言优于EJB的EJBQL语言,优于Hibernate的HQL语言,无论Hibernate的创建者还是使用者怎样的吹捧HQL如何如何的棒,但一个客观的事实是,SQL语言是一种标准的操作数据库的语言,SQL除了在DBMS中使用外,在vb、delphi、php、c/c++、java等等高级语言中均可以使用,它是任何一个软件工作者都无法回避的,是必须掌握的一门基础性语言。
        核心类ProcessVO提供了一个将每一条记录转换成一个Map对象的方法,通过循环语句将任意的查询结果ResultSet转换成List<Map>类型的变量。因此,JadePool查询操作没有标新立异,它遵守的是行业标准,在语言语法上追求的是道法自然。
 
        以下是 _recordMappingToMap的源代码
[java] 
/** 
 * 将ResultSet结果集中的记录映射到Map对象中. 
 * 
 * @param fieldClassName 是JDBC API中的类型名称, 
 * @param fieldName 是字段名, 
 * @param rs 是一个ResultSet查询结果集, 
 * @param fieldValue Map对象,用于存贮一条记录. 
 * @throws SQLException 
 */  
private void _recordMappingToMap(String fieldClassName, String fieldName, ResultSet rs, Map fieldValue) throws SQLException {  
    fieldName = fieldName.toLowerCase();  
  
    //优先规则:常用类型靠前  
  
    if (fieldClassName.equals("java.lang.String")) {  
        String s = rs.getString(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassName.equals("java.lang.Integer")) {  
        int s = rs.getInt(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);//早期jdk需要包装,jdk1.5后不需要包装  
        }  
    } else if (fieldClassName.equals("java.lang.Long")) {  
        long s = rs.getLong(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassName.equals("java.lang.Boolean")) {  
        boolean s = rs.getBoolean(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassName.equals("java.lang.Short")) {  
        short s = rs.getShort(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassName.equals("java.lang.Float")) {  
        float s = rs.getFloat(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassName.equals("java.lang.Double")) {  
        double s = rs.getDouble(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassName.equals("java.sql.Timestamp")) {  
        java.sql.Timestamp s = rs.getTimestamp(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassName.equals("java.sql.Date") || fieldClassName.equals("java.util.Date")) {  
        java.util.Date s = rs.getDate(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassName.equals("java.sql.Time")) {  
        java.sql.Time s = rs.getTime(fieldName);  
        if (rs.wasNull()) {  
            fieldValue.put(fieldName, null);  
        } else {  
            fieldValue.put(fieldName, s);  
        }  
    } else if (fieldClassNa
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,