将任意查询结果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的源代码
/** * 查询方法 * * @param sqlquery 是标准查询语句,可以是任意复杂的多表查询语句,但必须是受JDBC API支持的标准查询语句 * @return 将查询结果ResultSet对象转换成List<Map<String,Object>>类型的结果 * @throws SQLException */ @Override public List query(String sqlquery) throws SQLException { return this.query(sqlquery, 0); }