`
wangemperor
  • 浏览: 37692 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ResultSetMetaData和DatabaseMetaData用法简介(转)

阅读更多
ResultSetMetaData和DatabaseMetaData用法简介(转)
  内容概要:
  
  1、ResultSetMetaData中的方法的介绍。
  
  2、DatabaseMetaData中主要方法的介绍。
  
  3、如何使用DatabaseMetaData类获得的信息进行反向设计表。
  
  ?
  
  ??? 在论坛中看到有好多人问关于,数据库中信息和表的信息的获得的问题,如:数据库中有多少表,表中的字段的含义等,为了解决这个问题我学习了相关的两个类ResultSetMetaData和DataBaseMetaData来解决相关问题。下面是我的一些学习的心得体会,希望能够给朋友们带来一点启示或者帮助。首先是ResultSetMetaData:
  
  这个类完成了查询结果信息和结果中的列的各种信息。它包含的方法以及各个方法的作用,在下面这个演示程序中一一介绍。在这个演示程序中用到数据库是Access的,数据库中的表的名字是STUDENTINFO表,包含字段有
  
  IDNO 文本型 长为8
  
  NAME 文本型 长为8
  
  SEX 文本型 长为6
  
  AGE 数值型 长为8
  
  BIRTHDT 文本型 长为8
  
  程序中主要是操作这个表,选择的驱动是ODBC。程序如下:
  
  
  package javax.util.guxing;
  
  import java.sql.*;
  
  public class DBAccess ...{
  
   public static java.sql.Connection conn = null;
  
   private String sqlStr = "";
  
   public DBAccess() ...{
   try ...{
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   conn = DriverManager.getConnection("jdbc:odbc:TestDB", "admin", "");
   }catch (ClassNotFoundException ex) ...{
   System.out.println(ex.toString());
   }catch (SQLException sqlEx) ...{
   System.out.println(sqlEx.toString());
   }
  
   }
  
   public ResultSet Search() ...{
   ResultSet rset = null;
   sqlStr = "SELECT * FROM STUDENTINF ";
   Statement smt = null;
   try ...{
   smt = conn.createStatement();
   rset = smt.executeQuery(sqlStr);
   }
   catch (SQLException ex) ...{
   System.out.println("Exception:" + ex.toString());
   }
   return rset;
   }
  
   public void getResultSetMetaData()...{
   ResultSet rs = null;
   try ...{
   String[] tp = ...{"TABLE"};
   rs = this.Search();
   ResultSetMetaData rsmd = rs.getMetaData();
   /**//*
   获得ResultSetMeataData对象。所有方法的参数都是列的索引号,即第几列,从1开始
   */
   System.out.println("下面这些方法是ResultSetMetaData中方法");
  
   System.out.println("获得1列所在的Catalog名字 : " + rsmd.getCatalogName(1));
  
   System.out.println("获得1列对应数据类型的类 " + rsmd.getColumnClassName(1));
  
   System.out.println("获得该ResultSet所有列的数目 " + rsmd.getColumnCount());
  
   System.out.println("1列在数据库中类型的最大字符个数" + rsmd.getColumnDisplaySize(1));
  
   System.out.println(" 1列的默认的列的标题" + rsmd.getColumnLabel(1));
  
   System.out.println("1列的模式 " + rsmd.GetSchemaName(1));
  
   System.out.println("1列的类型,返回SqlType中的编号 " + rsmd.getColumnType(1));
  
   System.out.println("1列在数据库中的类型,返回类型全名" + rsmd.getColumnTypeName(1));
  
   System.out.println("1列类型的精确度(类型的长度): " + rsmd.getPrecision(1));
  
   System.out.println("1列小数点后的位数 " + rsmd.getScale(1));
  
   System.out.println("1列对应的模式的名称(应该用于Oracle) " + rsmd.getSchemaName(1));
  
   System.out.println("1列对应的表名 " + rsmd.getTableName(1));
  
   System.out.println("1列是否自动递增" + rsmd.isAutoIncrement(1));
  
   System.out.println("1列在数据库中是否为货币型" + rsmd.isCurrency(1));
  
   System.out.println("1列是否为空" + rsmd.isNullable(1));
  
   System.out.println("1列是否为只读 " + rsmd.isReadOnly(1));
  
   System.out.println("1列能否出现在where中 " + rsmd.isSearchable(1));
  
   }
   catch (SQLException ex) ...{
   ex.printStackTrace();
   }
   }
  
   public static void main(String args[])...{
   DBAccess dbAccess = new DBAccess();
   dbAccess.getResultSetMetaData();
   }
  }
  
  
  
  
  
  通过上面例子中的方法能够获得,ResultSet中的表的信息。ResultSetMetaData只是获得表的信息,使用DatabaseMetaData则是用来获得数据库的信息,下面介绍这个类的使用方法。
  
  ?
  
  DatabaseMetaData对象提供的是关于数据库的各种信息,这些信息包括:
  
  1、??? 数据库与用户,数据库标识符以及函数与存储过程。
  
  2、??? 数据库限制。
  
  3、??? 数据库支持不支持的功能。
  
  4、??? 架构、编目、表、列和视图等。
  
  通过调用DatabaseMetaData的各种方法,程序可以动态的了解一个数据库。由于这个类中的方法非常的多那么就介绍几个常用的方法来给大家参考。
  
  DatabaseMetaData实例的获取方法是,通过连接来获得的
  
  Connection conn = //创建的连接。
  
  DatabaseMetaData dbmd = Conn.getMetaData();
  
  创建了这个实例,就可以使用他的方法来获取数据库得信息。首先是数据库中用户标识符的信息的获得,主要使用如下的方法:
  
  getDatabaseProductName()用以获得当前数据库是什么数据库。比如oracle,access等。返回的是字符串。
  
  getDatabaseProductVersion()获得数据库的版本。返回的字符串。
  
  getDriverVersion()获得驱动程序的版本。返回字符串。
  
  supportsResultSetType(ResultSet.resultype)是判定是否支持这种结果集的类型。比如参数如果是Result.TYPE_FORWARD_ONLY,那就是判定是否支持,只能先前移动结果集的指针。返回值为boolean,true表示支持。
  
  上面介绍的只是几个常用的方法,这个类中还有很多方法,可以到jdk的帮助文档中去查看类java.sql.DatabaseMetaData。
  
  这个类中还有一个比较常用的方法就是获得表的信息。使用的方法是:
  
  getTables(String catalog,String schema,String tableName,String[] types),
  
  这个方法带有四个参数,他们表示的含义如下:
  
  String catalog——要获得表所在的编目。串“”””意味着没有任何编目,Null表示所有编目。
  
  String schema——要获得表所在的模式。串“”””意味着没有任何模式,Null表示所有模式。该参数可以包含单字符的通配符(“_”),也可以包含多字符的通配符(“%”)。
  
  String tableName——指出要返回表名与该参数匹配的那些表,该参数可以包含单字符的通配符(“_”),也可以包含多字符的通配符(“%”)。
  
  String types——一个指出返回何种表的数组。可能的数组项是:”TABLE”,”VIEW”,
  
  ”SYSTEM TABLE”,”GLOBAL TEMPORARY”,”LOCAL TEMPORARY”,”ALIAS”,
  
  “SYSNONYM”。
  
  通过getTables()方法返回一个表的信息的结果集。这个结果集包括字段有:TABLE_CAT表所在的编目。TABLE_SCHEM表所在的模式,TABLE_NAME表的名称。TABLE_TYPE标的类型。REMARKS一段解释性的备注。通过这些字段可以完成表的信息的获取。
  
  还有两个方法一个是获得列getColumns(String catalog,String schama,String tablename,String columnPattern)一个是获得关键字的方法getPrimaryKeys(String?catalog, String?schema, String?table)这两个方法中的参数的含义和上面的介绍的是相同的。凡是pattern的都是可以用通配符匹配的。getColums()返回的是结果集,这个结果集包括了列的所有信息,类型,名称,可否为空等。getPrimaryKey()则是返回了某个表的关键字的结果集。通过getTables(),getColumns(),getPrimaryKeys()就可以完成表的反向设计了。主要步骤如下:1、? 通过getTables()获得数据库中表的信息。2、? 对于每个表使用,getColumns(),getPrimaryKeys()获得相应的列名,类型,限制条件,关键字等。3、? 通过1,2获得信息可以生成相应的建表的SQL语句。
分享到:
评论

相关推荐

    JDBC元数据操作--DatabaseMetaData接口Demo

    DatabaseMetaData和ResultSetMetaData就是两个常用的获取数据库元数据相关信息的接口,本文只讲解DatabaseMetaData接口获取元数据的方法。 文章地址:http://blog.csdn.net/chen_zw/article/details/18816599

    jtdsJDBC Driver

    JTDS完全与JDBC 3.0兼容,支持只向前的,和可滚动/可更新的结果集(ResultSets)中并行(完全独立)语句,并且可实施所有databasemetadata和resultsetmetadata方法。 文件有说明spring+hibernate+c3p0+jtds的配置

    Java-JDBC【之】数据类型、封装JDBCUtil、封装通用增删改、ResultSet与ResultSetMetaData

    Java-JDBC【之】数据类型、封装JDBCUtil、封装通用增删改、ResultSet与ResultSetMetaData、查询结果集映射Map与ListMap 1.数据类型 2.封装通用增删改 2.1.封装JDBCUtil 2.2.封装Dao通用增删改 2.3.测试 3.ResultSet...

    Java数据库编程宝典2

    10.2 使用DatabaseMetaData 10.3 检索与数据库相关的信息 10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11...

    Java数据库编程宝典4

    10.2 使用DatabaseMetaData 10.3 检索与数据库相关的信息 10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11...

    Java数据库编程宝典1

    10.2 使用DatabaseMetaData 10.3 检索与数据库相关的信息 10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11...

    Java数据库编程宝典3

    10.2 使用DatabaseMetaData 10.3 检索与数据库相关的信息 10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11...

    获得结果集的字段名称_ResultSet的属性要调用ResultSetMetaData的方法

    获得结果集的字段名称_ResultSet的属性要调用ResultSetMetaData的方法

    疯狂JAVA讲义

    1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发Java的准备 7 1.4.1 安装JDK 8 ...

    Java_Servlet_StudentInfo

    数据库元数据 DatabaseMetaData 参数元数据 ParameterMetaData 结果集元数据 ResultSetMetaData 2 MVC 设计模式 ​ MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本...

    Mybatis通用操作数据库方法类总结

    在项目中用到myBatis作为orm框架,与spring结合,通常的... import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; i

    国外java源码网站-mongodb-jdbc-driver:MongoDBJDBC驱动程序|DbSchemaMongoDB设计器

    国外java源码网站 MongoDb JDBC 驱动程序 | DbSchema MongoDB 设计器 驱动是为大家编写的,需要一个MongoDb JDBC驱动。...驱动程序使用本机来连接和执行查询。...使用resultSet.getObject(1...从DatabaseMetaData.getTables()

    数据库工具类DatabaseUtil.java

    * 返回记录总数, 使用方法: getAllCount("SELECT count(ID) from tableName") 2004-06-09 * 可滚动的 Statement 不能执行 SELECT MAX(ID) 之类的查询语句(SQLServer 2000) * * @param sql * 需要执行的 SQL *...

    java读取table列名

    java使用ResultSetMetaData 读取table的列名

    表字段描述依赖包

    表字段描述依赖包 ormlite 之ResultSetMetaData

    orm-benchmark:比较不同orm解决方案与simpleflatmapper的基准

    迁移到具有更好结构的 。基准测试比较不同orm解决方案与simpleflatmapper的基准我们运行... SFM Static使用预定义的列列表SFM Dynamic将使用ResultSetMetadata SFM Dynamic NoASM将使用ResultSetMetadata但不使用asm

    Java语言基础下载

    构造方法在继承中的使用 96 super关键字 97 包装类 97 toString( )方法 100 内容总结 101 独立实践 102 第七章:类的高级特征 103 学习目标 103 static关键字 104 final关键字 106 内部类 106 实例分析 110 抽象类,...

    JDBC笔记 JDBC笔记

    一、概述: JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库...java.sql.ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对象。

    ResultSet的属性

    获得结果集的字段名称,ResultSet的属性要调用ResultSetMetaData的方法

    java通讯录系统代码

    //从数据库获取数据方法 public Vector getData(){ Vector vector=new Vector(); try { //驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //连接数据库 con=...

Global site tag (gtag.js) - Google Analytics