JDBC Meta Data(元数据)----描述数据的数据。它的接口有:
n DatabaseMetaData(数据库元数据)
n ResultSetMetaData(结果集元数据)
DatabaseMetaData(数据库元数据)
在对数据源进行连接以后,得到一个Connection对象,可以从这个对象获得有关数据源的各种信息,包括关于数据库中的各个表,表中的各个列,数据类型和存储过程等各方面的信息。根据这些信息,JDBC程序可以访问一个事先并不了解的数据库。获取这些信息的方法都是在DatabaseMetaData的对象上实现的,而DatabaseMetaData对象是在Connection对象之上获得的。
下面的语句可以在一个连接的基础上创建一个DatabaseMetaData 对象:
DatabaseMetaData dm=con.getMetaData();
数据库的一些常用信息可通过DatabaseMetaData对象的下列方法获得。
n getURL()//返回一个String对象,代表数据库的URL.
n getUserName()//返回此连接使用的数据库的用户名
n isReadOnly()//返回一个boolean值,指示数据库是否只允许读操作。
n getDatabaseProduceName()//返回数据库的产品名称
n getDatabaseProduceVersion()//返回数据库的版本号
n getDriverName()//返回驱动程序的名称。
n getDriverVersion()//返回驱动程序的版本号
代码示例:
[java]
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.NamingException;
public class DataBaseMetaDataTest {
public static void main(String[] args) {
Connection con = null;
String jndiname = "jdbcPool/mydatasource";
try {
con = DBCon.getConnectionFromPooledDataSource(jndiname);
// 测试数据库信息
DatabaseMetaData dm = con.getMetaData();
System.out.println("1. 数据库的基本信息");
System.out.println("Database is " + dm.getDatabaseProductName());
System.out.println("Database version is "
+ dm.getDatabaseProductVersion());
System.out.println("JDBC Driver is " + dm.getDriverName());
System.out.println("JDBC driver version is "
+ dm.getDriverVersion());
// 获取数据库中目录(数据库)的信息
System.out.println("2. 数据库中目录(数据库)的信息");
ResultSet catalogs = dm.getCatalogs();
while (catalogs.next()) {
System.out.println(catalogs.getString(1));
}
// 获取数据库中模式的信息
System.out.println("3. 数据库中模式的信息");
ResultSet schemas = dm.getSchemas();
while (schemas.next()) {
System.out.println(schemas.getString(1));
}
// 获取数据库中各个表的情况
System.out.println("4. 数据库中各个表的信息");
ResultSet tables = dm.getTables("pubs", null, null, null);
while (tables.next()) {
for (int i = 0; i < 5; i++) {
System.out.print(tables.getString(i + 1));
System.out.print(" | ");
}
System.out.println();
}
// 获取数据库表中各个列的信息
System.out.println("5. 数据库表中各个列的信息");
ResultSet columns = dm.getColumns(null, null,
"student", null);
while (columns.next()) {
for (int i = 0; i < 18; i++) {
System.out.print(columns.getString(i + 1));
System.out.print(" | ");
}
System.out.println();
}
} catch (NamingException ex) {
System.err.println("Name Not Bound : " + ex.getMessage());
} catch (SQLException ex) {
System.err.println("SQLException : " + ex.getMessage());
} finally {
try {
if (con != null)