Atitit. 資料庫 -----catalog 與 schema 的設計區別以及在實際中使用 擷取資料庫所有庫表 java jdbc php c#.Net
1 . -catalog 與 schema 的設計區別 1
2 . 擷取資料庫元資訊的幾種方法 2
2 .1. 直接讀取元表 mysql 的 information_schema, mssql 的 SysDatabases 3
2 .2. 使用諸如 jdbc 等通用介面 3
2 .3. 使用資料庫單獨提供的驅動介面,比如 mysql 的 mysql_list_dbs 3
3 . 擷取資料庫 mysql 中的所有資料庫列表 getCatalogs 3
3 .1. 遍曆資料庫所有資料庫 3
3 .2. Php 版本 mysql_list_dbs() 4
3 .3. 。 Net 版本 SysDatabases 4
3 .4. 。 Net 版本 // 利用 OleDbConnection 的 GetOleDbSchemaTable 來獲得資料庫的結構 4
4 . 擷取某個資料庫的所有表 getTables 4
4 .1. Php 的實現 mysql_list_tables 5
4 .2. 。 N et版 讀取 SysObjects 表 5
5 . 參考 5
1. -catalog與schema 的設計區別
按照 SQL 標準的解釋,在 SQL 環境下 Catalog 和 Schema 都屬於抽象概念,可以把它們理解為一個容器或者資料庫物件命名空間中的一個層次,主要用來解決命名衝突問題。從概念上說,一個資料庫系統包含多個 Catalog ,每個 Catalog 又包含多個 Schema ,而每個 Schema 又包含多個資料庫物件(表、視圖、欄位等),反過來講一個資料庫物件必然屬於一個 Schema ,而該 Schema 又必然屬於一個 Catalog ,這樣我們就可以得到該資料庫物件的完全限定名稱從而解決命名衝突的問題了;例如資料庫物件表的完全限定名稱就可以表示為: Catalog 名稱 .Schema 名稱 . 表名稱。這裡還有一點需要注意的是,SQL標準並不要求每個資料庫物件的完全限定名稱是唯一的,就象網域名稱一樣,如果喜歡的話,每個IP地址都可以擁有多個網域名稱。
從實現的角度來看,各種資料庫系統對 Catalog 和 Schema 的支援和實現方式千差萬別,針對具體問題需要參考具體的產品說明書,比較簡單而常用的實現方式是使用資料庫名作為 Catalog 名,使用使用者名稱作為 Schema 名,具體可參見下表:
表 1 常用資料庫
| 供應商 |
Catalog 支援 |
Schema 支援 |
| Oracle |
不支援 |
Oracle User ID |
| MySQL |
不支援 |
資料庫名 |
| MS SQL Server |
資料庫名 |
對象屬主名, 2005 版開始有變 |
| DB2 |
指定資料庫物件時, Catalog 部分省略 |
Catalog 屬主名 |
| Sybase |
資料庫名 |
資料庫屬主名 |
| Informix |
不支援 |
不需要 |
| PointBase |
不支援 |
資料庫名 |
作者 :: 綽號 : 老哇的爪子 ( 全名:: Attilax akbar al rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 漢字名:艾龍, EMAIL:1466519819@qq.com
轉載請註明來源: http://www.cnblogs.com/attilax/
下面就是如何從資料庫讀取表資訊了。
在這裡依賴一個類DatabaseMetaData,這個對象可以從資料庫連接來擷取。有了它萬事大吉了,想知道什麼問它即可:
DatabaseMetaData databaseMetaData = conn.getMetaData();
//擷取所有表 ResultSet tableSet = databaseMetaData.getTables(null, "%", "%", new String[]{"TABLE"});
//擷取tableName表列資訊 ResultSet columnSet = databaseMetaData.getColumns(null, "%", tableName, "%");
2. 擷取資料庫元資訊的幾種方法
2.1. 直接讀取元表 mysql 的 information_schema ,mssql 的 SysDatabases
2.2. 使用諸如jdbc 等通用介面
2.3. 使用資料庫單獨提供的驅動介面,比如 mysql 的 mysql_list_dbs
3. 擷取資料庫 mysql中的所有資料庫列表 getCatalogs
3.1. 遍曆資料庫所有資料庫
[
{"TABLE_CAT": "information_schema"},
{"TABLE_CAT": "8kbl"},
{"TABLE_CAT": "atiposdb"},
{"TABLE_CAT": "cyar"},
{"TABLE_CAT": "ecmdb"},
{"TABLE_CAT": "hxtaxi"},
{"TABLE_CAT": "iwbm2"},
{"TABLE_CAT": "iwmshop"},
{"TABLE_CAT": "iwmshopnow"},
{"TABLE_CAT": "limesurvey"},
{"TABLE_CAT": "mysql"},
{"TABLE_CAT": "performance_schema"},
{"TABLE_CAT": "shopedb"},
{"TABLE_CAT": "shopnc"},
{"TABLE_CAT": "test"},
{"TABLE_CAT": "timerdb"},
{"TABLE_CAT": "vod2"},
{"TABLE_CAT": "wechatdb"},
{"TABLE_CAT": "wordpress"},
{"TABLE_CAT": "wxb_site_new"},
{"TABLE_CAT": "wxmiqi"},
{"TABLE_CAT": "zuche5"}
]
getSchemas 是空的。。
3.2. Php 版本 mysql_list_dbs()
$dbs = mysql_list_dbs(); //調用mysql_list_dbs函數
3.3. 。 Net 版本 SysDatabases
1. 擷取所有資料庫名 : (1) 、 Select Name FROM Master.dbo.SysDatabases orDER BY Name
3.4. 。 Net 版本 // 利用 OleDbConnection 的 GetOleDbSchemaTable 來獲得資料庫的結構
4. 擷取某個資料庫的所有表 getTables
DatabaseMetaData dbmd = dbx .getConnection().getMetaData();
// databaseMetaData.getColumns(localCatalog, localSchema,
// localTableName, null);
ResultSet rs = dbmd .getTables( "atiposdb" , "%" , "%" , new String[]{ "TABLE" });
[
{
"TABLE_NAME": "applications",
"REMARKS": "",
"TABLE_TYPE": "TABLE",
"TABLE_SCHEM": null,
"TABLE_CAT": "atiposdb"
},
{
"TABLE_NAME": "attribute",
"REMARKS": "",
"TABLE_TYPE": "TABLE",
"TABLE_SCHEM": null,
"TABLE_CAT": "atiposdb"
},
4.1. Php 的實現 mysql_list_tables
(PHP 3, PHP 4 , PHP 5)
mysql_list_tables -- 列出 MySQL 資料庫中的表
4.2. 。 N et版 讀取 SysObjects 表
2. 擷取所有表名 : (1) 、 Select Name FROM SysObjects Where XType='U' orDER BY Name
5. 參考
asp.net擷取SQL所有資料庫名、所有表名、所有欄位名、列描述 - XMM_1030的專欄 - 部落格頻道 - CSDN.NET.htm
.NET 擷取資料庫中所有表名的方法(轉載) - guoxuefeng - 部落格園.htm
ODBC, OLEDB, ADO, ADO.Net的演化簡史 - BobLiu - 部落格園.htm