JDBC-MySQL 驱动 ResultSetImpl
前言
JDBC通过MySQL数据库查询数据会返回一个结果集,将查询到的结果返回给程序,并将结果集封装在com.mysql.jdbcResultSetImpl里
com.mysql.jdbcResultSetImpl
通过执行后的结果获取结果集,将结果集中的数据封装在Customer的bean对象中(ORM Object Relational Mapping,简称ORM,对象关系映射),获取方式可指定类型getString,也可使用公共的Object(多态)
通过指定的索引获取值
也可以通过别名(或列名)获取
在ResultSetImpl有将结果集与索引封装的Map集合,可以通过集合进行快速查询到指定的别名值;
ResultSetImpl封装了四个map集合,通过集合的名字可以大致推断出每个集合的大致存储类型
通过buildIndexMapping中使用fields对集合new TreeMap并进行装填数据,以及initializeWithMetadata方法对columnToIndexCache new一个HashMap,buildIndexMapping在第一次查询是进行映射,并将hasBuiltIndexMapping设为true
ResultSetImpl ---- columnToIndexCache
在这个查询中发现查询过程中会先在代表缓冲的HashMap集合中查询,若不在会去其它map中查询,而又会在将查询到的数据放在columnToIndexCache的代表缓冲的map集中,以达到缓冲的效果
总结
- ResultSet 的实体类 ResultSetImpl 维护了数据库返回的结果集
- JDBC 处理结果集的数据查询时,会先看是否构建映射关系,没有就创建 columnLabelToIndex、columnNameToIndex、fullColumnNameToIndex(new TreeMap(String.CASE_INSENSITIVE_ORDER))
- columnToIndexCache 缓冲集合在创建ResultSetImpl时创建(HashMap)