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