查询数据库布局信息

        JDBC是各大数据库供货商一起拟定并遵从的规范,数据库的布局信息关于JDBC来说是彻底通明的。JDBC经过元数据DatebaseMetadata、ResultSetMetaData、ParameterMetadatal来描绘有关布局信息。JadePool在给定数据库衔接的前提下,经过运用元数据获取关联的布局信息,运用DbCenter、Table、Field等Db族类完成数据库布局的 http://www.kp1234.info/linked/20130310.do 面向目标的编程。DbCenter经过完成有限多例形式中的某一个实例来办理数据库的布局信息,经过该实例的Map tableMap变量办理该数据库下一切表的布局信息,每一个Table目标经过Map 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 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.String getFieldTypeClassName(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String getFieldTypeName(java.lang.String tableName, java.lang.String fieldName)  
java.lang.String[] getKeys(java.lang.String tableName)  
java.lang.String[] getKeysType(java.lang.String tableName)//主键类型
 java.lang.String getSchema()  
Table getTable(java.lang.String tableName)  
java.util.Map getTableMap()  
java.lang.String[] getTableNames()  
static DbCenter instance(java.sql.Connection con, int connectionType)  
boolean isExistField(java.lang.String tableName, java.lang.String fieldName)  
boolean isExistKeyField(java.lang.String tableName, java.lang.String fieldName)  
boolean isExistTable(java.lang.String tableName)  
boolean isFieldNullable(java.lang.String tableName, java.lang.String fieldName)  
boolean isFieldPrimarykey(java.lang.String tableName, java.lang.String fieldName)  以下是一个查询数据库布局信息的典范 public static void queryDb() throws SQLException {
        ProcessVO pvo = new ProcessVO();
        try {
            String s0 = pvo.queryDbInfo();//查询完好的数据库布局信息
            System.out.println(s0);
            String s1 = pvo.queryTableInfo("news");//查询资讯表news的布局信息
            System.out.println(s1);
            Db db=pvo.getDb();
            String[] tableNames=db.getTableNames();//查询数据库中包括的一切的表的称号
            Table table=db.getTable("news");//查询表的称号为"news"的Table目标
            Map fileds=table.getFieldMap();//查询一个表中包括的字段的调集
            Field field=fileds.get("title");//查询字段名是"title"的Field字段目标
            
        } finally {
            pvo.closeCon();
        }
    }
 更多信息,能够参加源代码和协助文档 http://www.fp1111.info/linked/20130310.do

你可能感兴趣的:(查询数据库布局信息)