操作元数据

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


相关文章推荐

JDBC操作元数据示例-- DatabaseMetaData接口

package xxx.xxx.xxx; import java.sql.CallableStatement; import java.sql.Connection; import ja...

Hadoop Hive sql语法详解3--DML 操作:元数据存储

hive增删改查与传统数据的区别是什么? hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改...

Hadoop Hive sql语法详解3--DML 操作:元数据存储

转载自:http://www.aboutyun.com/thread-7325-1-1.html hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以l...

Hadoop Hive基础SQL语法(DML 操作:元数据存储)

2. DML操作:元数据存储hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。DML包括:INSER...
  • it_dx
  • it_dx
  • 2016年09月25日 19:12
  • 184

SQLServer元数据操作

元数据简介 元数据 (metadata) 最常见的定义为"有关数据的结构数据",或者再简单一点就是"关于数据的信息",日常生活中的图例、图书馆目录卡和名片等都可以看作是元数据。在关系型数据库管理...

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

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

Unix高级编程:获取文件元数据、文件夹操作

1. 计算机大小端,代码参见 big_little.c #include int main(void) {     short var_a = 0x0001;     char *var_c...

jdbc学习:操作元数据,以及ORM框架基础

先上代码package test;import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Prepa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:操作元数据
举报原因:
原因补充:

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