操作元数据
3592 点击·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()//返回驱动程序的版本号 代码示例: [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("程序结束!!!"); } } | |
![]() | ![]() |