日期:2014-05-16  浏览次数:20491 次

查询数据库结构信息
        JDBC是各大数据库供应商共同制定并遵循的标准,数据库的结构信息对于JDBC来说是完全透明的。JDBC通过元数据DatebaseMetadata、ResultSetMetaData、ParameterMetadatal来描述有关结构信息。JadePool在给定数据库连接的前提下,通过使用元数据获取相关的结构信息,使用DbCenter、Table、Field等Db族类实现数据库结构的面向对象的编程。DbCenter通过实现有限多例模式中的某一个实例来管理数据库的结构信息,通过该实例的Map<String, Table> tableMap变量管理该数据库下所有表的结构信息,每一个Table对象通过Map<String, Field> fieldMap变量管理该表下的所有字段的结构信息。由此,在DbCenter的某一个实例中完整地记录了数据库的全部相关结构信息。Db族类的建立给JDBC编程带了一场革命性的变化,成为HashMap关系数据映射技术最重要的基础,这样我们就可以在更高更深的层次考虑怎样实现数据库的CRUD操作
        在JadePool中,怎样实现数据库结构信息的查询?
        ProcessVO类中提供了两个方法:String queryDbInfo()和String queryTableInfo(String tableName), 这两个方法可以帮助我们在编程的过程中、或在调试的过程中查看详细的数据库的结构信息或者某一个表的结构信息。下面演示一下这两个方法的效果。

        以下是调用queryDbInfo()的输出结果

        /*
         
         Catalog :             qicity
         Connection driver name :    Microsoft SQL Server JDBC Driver 3.0

         TABLE[0]: ad----------------------------------

         FieldName :    ad_id;
         IsPrimarykey :    true;
         TypeName :    bigint;
         DataType :    -5;
         BufferLength :    8;
         Position :    1;
         ThisSize :    19;
         Decimal :    0;
         DefaultValue :    null;
         Remark :    null;
         NullAble :    false;
         className :    java.lang.Long
         
         ...
          
         */

        调用queryTableInfo("columns")的输出结果
        /*
         
         TABLE:     columns
         ------------------------------------------------------

         FieldName :    columns_id;
         TypeName :    bigint;
         DataType :    -5;
         BufferLength :    8;
         Position :    1;
         ThisSize :    19;
         Decimal :    0;
         DefaultValue :    null;
         Remark :    null;
         NullAble :    false;
         className :    java.lang.Long

         
         FieldName :    title;
         TypeName :    varchar;
         DataType :    12;
         BufferLength :    100;
         Position :    4;
         ThisSize :    100;
         Decimal :    null;
         DefaultValue :    null;
         Remark :    null;
         NullAble :    true;
         className :    java.lang.String

         ......

         FieldName :    uptime;
         TypeName :    datetime;
         DataType :    93;
         BufferLength :    16;
         Position :    18;
         ThisSize :    23;
         Decimal :    3;
         DefaultValue :    null;
         Remark :    null;
         NullAble :    true;
         className :    java.sql.Timestamp
         */

        ProcessVO类中另外提供了public DbCenter getDb()方法,获取DbCenter对象,以下是DbCenter中有关数据库结构信息的部分方法。

java.lang.String getCatalog()  
java.sql.Connection getCon()  
java.lang.String getDriverName()  
Field getField(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String getFieldBufferLength(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String getFieldDecimal(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String getFieldDefaultValue(java.lang.String tableName, java.lang.String fieldName)  
java.util.Map<java.lang.String,Field> getFieldMap(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String getFieldPosition(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String getFieldRegex(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String getFieldRemark(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String[] getFields(java.lang.String tableName)  
java.lang.String getFieldSize(java.lang.String tableName, java.lang.String fieldName)  
int getFieldSqlType(java.lang.String tableName, java.lang.String fieldName)  
java.lang.