关闭

操作元数据

256人阅读 评论(0) 收藏 举报

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()//返回驱动程序的版本号

代码示例:

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("程序结束!!!");
	}
}

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指定列的列名。

请看下例:

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[i] = rsmd.getColumnName(i + 1);
				columnLabels[i] = rsmd.getColumnLabel(i + 1);
				columnTypes[i] = 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[i] + "\t");
			}
			System.out.println();
			for (int i = 0; i < colCount; i++) {
				System.out.print(columnNames[i] + "\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("程序结束!!!");
	}
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:129536次
    • 积分:3640
    • 等级:
    • 排名:第9272名
    • 原创:256篇
    • 转载:0篇
    • 译文:0篇
    • 评论:7条
    文章均来自以下教程网
    文章分类
    文章存档
    最新评论