JDBC 2.0

日期:2002 年 11 月 20 日

OracleDatabaseMetaData

在完成此段后,您应该能够:
  • 使用 OracleDatabaseMetaData 对象获得关于 Oracle 数据库的信息。
  • 使用 DatabaseMetaData 对象获得关于您的数据库的信息

简介

DatabaseMetaData 的实现提供关于数据库的信息并实现 java.sql.DatabaseMetaData 接口。数据库产品名称、版本号等均由 DatabaseMetaData 对象提供。oracle.jdbc.OracleDatabaseMetaData 类是 Oracle 对 DatabaseMetaData 接口的特定实现。

运行示例的前提条件

要运行下面提供的示例,需要
1. 将 Oracle JDBC2.0 类包含在 classpath 中。
2. 指定所连接数据库的 <hostname>、<port>、<SID>、<username> 和 <password>。

说明

在建立连接以后,通过调用 Connection 对象中的 getMetaData() 方法可以获得 DatabaseMetaData 对象。返回的对象可以进行类型转换以获得 OracleDatabaseMetaData 对象。以下代码显示如何使用 OracleDatabaseMetaData

import java.sql.*;
import oracle.jdbc.OracleDatabaseMetaData;
public class DatabaseMetaDataSample {
static final String dbURI = "jdbc:oracle:thin:@::";
public static void main(String args[]) throws Exception {

// Connection reference
Connection conn = null;

try {

// Load database driver
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());

// Make connection
conn = DriverManager.getConnection(dbURI,"<username>","<password>");

// Get the database meta data
OracleDatabaseMetaData dmd = (OracleDatabaseMetaData)conn.getMetaData();


if (dmd == null) {
System.out.println("Database meta data not available");
} else {

// Dispay Database Produce Name
System.out.println("Database Product Name :" +
dmd.getDatabaseProductName());

// Dispay Database Produce Version
System.out.println("Database Product Version :" +
dmd.getDatabaseProductVersion());

// Dispay Maximum Lenght of Table Name
System.out.println("Maximum Table Name length :" +
dmd.getMaxTableNameLength());

// Dispay precision for LOB
System.out.println("LOB Precision :" +
dmd.getLobPrecision());


// Dispay if the database uses local files
if (dmd.usesLocalFiles())
System.out.println("The Database uses Local Files");
else
System.out.println("The Database does not use Local Files");


System.out.println("The following Schemas are available in the database:");
ResultSet rs = dmd.getSchemas();
ResultSet rs1 = null;
while(rs.next()) {
System.out.println(rs.getString(1));
System.out.println(
"The following tables are available in the "+rs.getString(1)+" schema:");
rs1 = dmd.getTables(null,rs.getString(1),"%",null);
while(rs1.next()) {
System.out.println(" "+ rs1.getString(3)+" :"+rs1.getString(4));
}
}
}
} finally {

// Close connection
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
System.out.println("Error in closing Conection");
}
}
}
}
}

在获得 OracleDatabaseMetaData 对象后,可以使用其中的方法获取关于数据库的详细信息。OracleDatabaseMetaData 中的大部分方法返回 boolean、int、String 或 ResultSet。 利用 ResultSet,可以使用正常的 ResultSet 方法(如 getString() 和 getInt() )检索以上代码中所示数据。
getDatabaseProductName() 方法将数据库产品的名称以 String 返回。
getDatabaseProductVersion() 方法将数据库产品版本以 String 返回。
getMaxTableNameLength() 方法将允许的表名最大长度以 int 返回。
getLobPrecision() 方法对 DatabaseMetaData 无效将 LOB 的精度以 String 返回。
usesLocalFiles() 方法在数据库使用本地文件时返回 'true',否则返回 'false'。
getSchemas() 方法将数据库中的模式以 ResultSet 返回。返回的 ResultSet 具有一列模式名称。
getTables() 方法返回表的说明,匹配目录、模式、表名和类型条件,以 ResultSet 返回。getTables() 方法的参数是:

catalog — 目录名称;"" 检索不带有目录的项目;null 表示从选择的条件中删除目录名称
schemaPattern — 模式名称样式;"" 检索不带有模式的项目
tableNamePattern — 表名称样式。"%" 返回所有表。
types — 要包括的表类型的列表;null 返回所有类型
getTables() 方法返回一个具有五列的 ResultSet
1. TABLE_CAT String — 表目录(可能为空)
2. TABLE_SCHEM String — 表模式(可能为空)
3. TABLE_NAME String — 表名称
4. TABLE_TYPE String — 表类型
5. TABLE_REMARKS String - 对表的注释说明

可以同样地使用 OracleDatabaseMetaDataDatabaseMetaData 中的其他方法。

DatabaseMetaData 接口中提供并且没有实现的方法将会抛出 SQLException。

寄送此页面
Printer View 打印机视图