欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Atitit. 数据库-catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc p.

程序员文章站 2022-04-26 13:30:01
...
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