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)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("程序结束!!!");
}
}
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);
// 测试
数据库信息
www.atcpu.com 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)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("程序结束!!!");
}
}
ResultSetMetaData(结果集元数据)
根据结果集的元数据,可以得到一个查询结果集关于查询表中列的个数,各个列名,类型以及各个列的宽度等。ResultSetMetaData的对象可以由ResultSet对象的getMetaData()方法得到。
ResultSetMetaData对象的常用方法如下:
n ResultSet rs=stmt.executeQuery();
n ResultSetMetaData rsmd=rs.getMetaData();
n rsmd.getColumnCount()//返回ResultSet对象的列数。
n rsmd.getColumnDisplaySize(int column);//返回column指定的列的最大宽度。
n rsmd.getColumnLabel(int column)//返回column指定列的标签。
n rsmd.getColumnName(int column)//返回column指定列的列名。
请看下例:
[
java]
import
java.sql.Connection;
import
java.sql.ResultSet;
import
java.sql.ResultSetMetaData;
import
java.sql.SQLException;
import
java.sql.Statement;
import
javax.naming.NamingException;
public class ResultSetMetaDataTest {
public static void main(String[] args) {
Statement stmt = null;
ResultSet rs = null;
Connection con = null;
String jndiname = "jdbcPool/mydatasource";
try {
con = DBCon.getConnectionFromPooledDataSource(jndiname);
stmt = con.createStatement();
String querySQL1 = "select * from student";
rs = stmt.executeQuery(querySQL1);
// 提取结果集的元数据:
ResultSetMetaData rsmd = rs.getMetaData();
int colCount = rsmd.getColumnCount();
String[] columnNames = new String[colCount];
String[] columnLabels = new String[colCount];
int[] columnTypes = new int[colCount];
for (int i = 0; i < colCount; i++) {
columnNames = rsmd.getColumnName(i + 1);
columnLabels = rsmd.getColumnLabel(i + 1);
columnTypes = rsmd.getColumnType(i + 1);
}
System.out.println();
System.out.println("提取的数据如下:");
System.out.println();
System.out .println("----------------------");
for (int i = 0; i < colCount; i++) {
System.out.print(columnLabels + "\t");
}
System.out.println();
for (int i = 0; i < colCount; i++) {
System.out.print(columnNames + "\t");
}
} 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)
con.close();
} catch (Exception e) {
}
}
System.out.println("程序结束!!!");
}
}