操作元数据

原创 2012年03月23日 09:59:54

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


C# 元数据学习

在过去,以一种语言编写的软件组件(.exe 或 .dll)不能方便地使用以另一种语言编写的软件组件。 在这个问题的解决上,COM 向前迈进了一步。 .NET Framework 允许编译器向所有...
  • xiaojia7283
  • xiaojia7283
  • 2014年02月25日 10:36
  • 927

hive-查询元数据

import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import...
  • zhong8732134
  • zhong8732134
  • 2017年01月10日 21:20
  • 865

SQL总结之数据库元数据(MSSQL)

数据库元数据就是指定义数据库各类对象结构的数据。 常见的数据库对象,包括:数据库表、触发器,索引,视图,存储过程,函数。 掌握数据库元数据,就需要深入地理解数据库的结构组成。 那么掌握数据库元数据...
  • gezhonglei2007
  • gezhonglei2007
  • 2016年09月17日 11:57
  • 2674

元数据 and 元数据标准

一般银行内的系统建设环境分为三个:开发环境、测试环境与生产环境,每一个系统建设的周期都需要经过前两个环境才能正式进入生产环境。然而在系统的设计、开发、测试、上线过程中,无论是需求变更还是BUG修改都避...
  • gnicky
  • gnicky
  • 2017年02月22日 17:42
  • 615

分布式文件系统元数据服务模型

随着非结构化数据的爆炸,分布式文件系统进入了发展的黄金时期,从高性能计算到数据中心,从数据共享到互联网应用,已经渗透到数据应用的各方各面。对于大多数分布式文件系统(或集群文件系统,或并行文件系统)而言...
  • IT_YUAN
  • IT_YUAN
  • 2013年03月26日 16:35
  • 2399

什么是元数据(Metadata)?

什么是元数据        任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...
  • yjh314
  • yjh314
  • 2016年11月30日 10:09
  • 7701

JDBC元数据操作(一)-- DatabaseMetaData接口详解

1. 前言     在JDBC技术规范中,提供了Connection,Statement,ResultSet这三个开发过程中经常用到的接口。针对与每个接口,JDBC规范提供了相应的接口描述对象,也就是...
  • czw2010
  • czw2010
  • 2014年01月27日 17:36
  • 21555

数据字典与元数据

数据字典数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明 1. 在传统的软件工程方法中,数据字典...
  • mlljava1111
  • mlljava1111
  • 2016年08月31日 09:50
  • 2369

数据仓库数据挖掘——数据仓库中的ETL和元数据

ETL 概念: zu
  • Sun7_She
  • Sun7_She
  • 2014年10月25日 19:48
  • 1234

元数据标签的含义和用法

最齐全的网站元数据meta标签的含义和用法 随着HTML5的流行和Web技术的不断演变,Meta标签队伍也越来越壮大,从Windows XP的IE6到如今Windows 7、Windows ...
  • Bin_Going
  • Bin_Going
  • 2017年04月29日 09:18
  • 666
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:操作元数据
举报原因:
原因补充:

(最多只允许输入30个字)