在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 ,