最近打算在应用程序中做数据库元信息读取与相关管理工作,必定会有很需要攻克的技术难关,所以在此写下此文以便日后查阅.
要使用JDBC来获取数据库元信息,则其中有一个对象是必须要了解的,那就是DatabaseMetaData这个对象JDBC规范对数据库元信息的抽取的接口对象,究竟如果开始元信息的读取与管理工作,现在我也不是十分的清楚,便是其中有几个方面我是比较关注的那就是:关于表,表中的列,因为在业务系统这些信息是非常重要的,那么就先从别人的一篇关于获取表的文章开始元信息的历程吧.
实现原理:主要是利用DatabaseMetaData.getTables(...)这个方法实现的,但是每一种数据库还存在一些差异,具体见下面详解。一起jquery,17jquery
一、getTables(...)方法说明
- catalog - 数据库目录名称,可设为null,(具体JDBC驱动的实现不一样在MySQL中指数据库名)。
- schemaPattern - 方案名称的样式,可设为null,(
具体JDBC驱动的实现不一样, 在Oracle中指用户名)。
- tableNamePattern - 表名称的样式,可以包含匹配符比如:"TEST%"
- types - 要包括的表类型组成的列表,可设为null,表示所有的。types的常量值为:"TABLE","VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"
各种数据库系统对Catalog和Schema的支持和实现方式是不一样的,针对具体问题需要参考具体的产品说明书,比较简单而常用的实现方式是使用数据库名作为Catalog名,使用用户名作为Schema名,具体可参见下表:
常用数据库Catalog和Schema对照表
供应商
|
Catalog支持
|
Schema支持
|
Oracle
|
不支持
|
Oracle User ID
|
MySQL
|
不支持
|
数据库名
|
MS SQL Server
内容
|
数据库名
|
对象属主名,2005版开始有变
|
DB2
|
指定数据库对象时,Catalog部分省略
|
Catalog属主名
|
Sybase
一起
|
数据库名
|
数据库属主名
|
Informix
|
不支持
|
不需要
|
PointBase
|
不支持
|
数据库名
|
我自己对数据库实际厂商对catalog支持的测试结果如下:
catalog这个单词的中文意思为"目录",具体JDBC规范中,不同的数据库对它的解释是不<br>
* 一样的具体情况是:oracle与hsql中没有任何意义,总是返回null值;而对于myslq与<br>
* sqlserver数据这个属性被解释为数据库名称,或称为数据库实例名称就是在JDBC连接<br>
* 中的URL最后的那个部分,三个典型数据连接情况可以是下面的某种样式:<br>
* jdbc:oracle:thin:@127.0.0.1:1521:ORCL<br>
* jdbc:mysql://127.0.0.1:3306/test<br>
* jdbc:jtds:sqlserver://127.0.0.1:1433/pubs<br>
* 那么在mysql中catalog被解释成test,而在sqlserver中catalog被解释成pubs,<br>
* 而在oracle中catalog并不解释成ORCL.这可能与数据本身的实现机制有关系,至于<br>
* oracle为什么要将catalog解释为null值我并不十分的清楚,我推测oracle数据库<br>
* 在结构似乎比其它数据多一个层次,其它厂商所谓的多个数据库实例有点类似于oracle<br>
* 数据的表空间的概念,oracle自己的实例似乎比这个还要高一个层次.<br>
* 究竟是什么意思就不去管它了,只要知道在oracle中的这个catalog是没有意义的
内容来自17jquery
二、常用数据库举例
1. MySQL示例
url = jdbc:mysql://localhost:3306/michaeldemo
user = "root";
getTables("michaeldemo", null, tableName,new String[] { "TABLE" });
看到这有人会问,你上面的对照表中不是说过MySQL不支持Catalog,而是支持Schema,这里怎么又设置第一个参数呢?不是互相矛盾么?的确是有这个疑问,不过当你看过MySQL的JDBC驱动源码后你就会明白其中原因了,我摘录一部分实现代码具体如下:
一起jquery,17jquery
可知参数catalog在MySQL中实际是当做Schema来用的,所以这就解释了为什么mysql中设置的却是参数catalog的值。
2. Oracle示例
url = jdbc:oracle:thin:@localhost:1521:ORA11g
user = "demo";
getTables(null, "DEMO", tableName,new String[] { "TABLE" });
一起jquery,17jquery
二、测试代码
JdbcCheckTableExitDemo.java
Oracle中运行结果:
getTables查询信息如下:
TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE
null DEMO TB_MYTEST TABLE
MySQL中运行结果:内容来自17jquery
getTables查询信息如下:
TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE
michaeldemo null TB_MYTEST TABLE
分享到:
相关推荐
实验八的主题是“通过JDBC方式访问数据库”,这是数据库概论课程中的一项重要实践内容。JDBC(Java Database Connectivity)是Java语言中用于与各种数据库交互的一种标准接口,由Sun Microsystems开发并定义,现已...
通过JDBC访问数据库~~入门必备应用操作
### JDBC访问数据库及环境配置详解 #### 一、引言 JDBC(Java Database Connectivity)是一种用于执行SQL语句的标准Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC...
JDBC 访问数据库步骤 JDBC(Java Database Connectivity)是 Java 语言中用来访问数据库的 API,提供了一种标准的方式来连接和操作数据库。下面是 JDBC 访问数据库的步骤: 步骤 1:加载对应数据库驱动 在使用 ...
### JDBC访问数据库的步骤与原理 #### JDBC简介 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了诸如...
这是使用jdbc访问数据库的方法,很好的,很详细的讲解了如何使用jdbc连接数据库
是一个最简单,也是学习jsp必须会的一个入门实验----通过jdbc连接数据库。 采用jsp+access数据库实现,同时使用javabean通过jdbc连接数据库。运行结果将显示从数据库查询出的图书。里面包含了javabean的源代码及解释...
《数据库系统概论》课程之实验八,通过JDBC访问数据库。本文件中包含实验报告一份,可运行代码一份与JDBC的驱动jar包。 程序实现了使用Java语言编程实现对数据库的访问,所有的SQL操作均在自己建立的新库里进行,...
本实验报告的主要目的是熟悉使用 JDBC 来进行数据库应用程序的设计,熟悉通过 JDBC 接口编程访问数据库并对数据库进行操作。实验中,我们使用 KingbaseES 数据库管理系统和 KingbaseES JDBC Driver,使用 Java 语言...
### JDBC访问数据库的优化策略详解 #### 一、引言 在现代企业级Java应用中,数据库访问扮演着至关重要的角色。数据库不仅是数据资源的中心,还是支撑前端应用高效运行的关键。通过Java Database Connectivity...
本教程将详细介绍如何使用Java JDBC访问数据库的全过程,包括连接数据库、执行SQL语句、处理结果集以及关闭资源。 首先,要使用JDBC,我们需要在Java项目中引入数据库驱动的jar包。对于不同的数据库(如MySQL、...
实验八“通过JDBC方式访问数据库”是针对数据库系统概论的一个实践环节,旨在让学生掌握使用Java语言通过JDBC(Java Database Connectivity)接口来设计数据库应用程序,以及对数据库进行操作。JDBC是一种标准API,...
### 实验7-通过JDBC访问数据库 #### 实验目的 - **理解数据库访问的基本原理:**通过本实验的学习,学生能够深入理解数据库存储的特点、数据库访问的基本概念和方法,尤其是掌握Java数据库连接(JDBC)的核心概念...
实验3 JDBC操作数据库3主要目的是通过Java的JDBC技术来熟悉和掌握数据库的连接与操作。这个实验涉及了以下几个核心知识点: 1. **MySQL数据库**:实验中提到了使用MySQL作为关系型数据库管理系统,它是开源且广泛...
JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一的访问接口。JDBC的目标是允许开发人员能够编写数据库独立的应用程序,即应用程序无需依赖于底层数据库的具体...
"Java Servlet 中使用 JDBC 访问数据库" Java Servlet 是一种服务器端的 Java 应用程序,用于处理 HTTP 请求和响应,而 JDBC(Java Database Connectivity)是 Java 语言中用来访问数据库的 API。现在,在 Servlet ...
它提供了一种统一的方式来访问各种类型的数据库,包括关系数据库、对象数据库和文本数据库等。下面是 JDBC 连接数据库的详细方法文档。 一、加载 JDBC 驱动程序 在连接数据库之前,首先要加载想要连接的数据库的...
实验实现的功能,check.jsp页面连接数据库test,接收index.jsp页面的输入并根据输入情况在数据库中进行查询,若id和password都能通过查询,则转向welcome.jsp页面,显示“欢迎你,XXX!”的字样,其中XXX为用户name...
为了方便开发者进行这些操作,Sun公司推出了一套标准的Java访问数据库的API——Java Database Connectivity(简称JDBC)。通过JDBC,Java程序可以连接多种类型的数据库,如MySQL、Oracle、SQL Server等。本文将详细...
JDBC数据库访问技术