DatabaseMetaData的用法
一 、得到这个对象的实例
Connection con ;
con = DriverManager.getConnection(url,userName,password);
DatabaseMetaData dbmd = con.getMetaData();
二、方法getTables的用法
原型:
ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type)
此方法可返回结果集合ResultSet ,结果集中有5列, 超出会报越界异常
功能描述:得到指定参数的表信息
参数说明:
参数:catalog:目录名称,一般都为空.
参数:schema:数据库名,对于Oracle来说就用户名
参数:tablename:表名称
参数:type :表的类型(TABLE | VIEW)
注意:在使用过程中,参数名称必须使用大写的。否则得到什么东西。
三、方法getColumns的用法
功能描述:得到指定表的列信息。
原型:
ResultSet DatabaseMetaData getColumns(String catalog,String schema,String tableName,String columnName)
参数说明:
参数catalog : 类别名称
参数schema : 用户方案名称
参数tableName : 数据库表名称
参数columnName : 列名称
四、方法getPrimaryKeys的用法
功能描述:得到指定表的主键信息。
原型:
ResultSet DatabaseMetaData getPrimaryKeys(String catalog,String schema,String tableName)
参数说明:
参数catalog : 类别名称
参数schema : 用户方案名称
参数tableName : 数据库表名称
备注:一定要指定表名称,否则返回值将是什么都没有。
五、方法.getTypeInfo()的用法
功能描述:得到当前数据库的数据类型信息。
六、方法getExportedKeys的用法
功能描述:得到指定表的外键信息。
参数描述:
参数catalog : 类别名称
参数schema : 用户方案名称
参数tableName : 数据库表名称
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语句。
通过上述三步完成反向设计表的过程。
获取数据库的相关信息:
1.获得数据库的一些相关信息
2.获得该用户下面的所有表
3.获得该用户下面的所有视图
4.获得数据库中所有方案名称
5.获得表或视图中的所有列信息
6. 获得一个表的索引信息
7.获得一个表的主键信息
8.获得一个表的外键信息
- package com.zsw.test;
-
-
- import java.sql.Connection;
- import java.sql.DatabaseMetaData;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
-
-
- public class DatabaseMetaDateApplication {
-
-
- private DatabaseMetaData dbMetaData = null;
- private Connection con = null;
-
-
- public DatabaseMetaDateApplication() {
- this.getDatabaseMetaData();
- }
-
-
- private void getDatabaseMetaData() {
- try {
- if (dbMetaData == null) {
- Class.forName("com.mysql.jdbc.Driver");
- String url = "jdbc:mysql://localhost:3306/creation_cms";
- String user = "root";
- String password = "root";
- con = DriverManager.getConnection(url, user, password);
- dbMetaData = con.getMetaData();
- }
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
-
-
-
-
- public void getDataBaseInformations() {
- try {
- System.out.println("数据库已知的用户: "+ dbMetaData.getUserName());
- System.out.println("数据库的系统函数的逗号分隔列表: "+ dbMetaData.getSystemFunctions());
- System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ dbMetaData.getTimeDateFunctions());
- System.out.println("数据库的字符串函数的逗号分隔列表: "+ dbMetaData.getStringFunctions());
- System.out.println("数据库供应商用于 'schema' 的首选术语: "+ dbMetaData.getSchemaTerm());
- System.out.println("数据库URL: " + dbMetaData.getURL());
- System.out.println("是否允许只读:" + dbMetaData.isReadOnly());
- System.out.println("数据库的产品名称:" + dbMetaData.getDatabaseProductName());
- System.out.println("数据库的版本:" + dbMetaData.getDatabaseProductVersion());
- System.out.println("驱动程序的名称:" + dbMetaData.getDriverName());
- System.out.println("驱动程序的版本:" + dbMetaData.getDriverVersion());
-
-
- System.out.println();
- System.out.println("数据库中使用的表类型");
- ResultSet rs = dbMetaData.getTableTypes();
- while (rs.next()) {
- System.out.println(rs.getString(1));
- }
- rs.close();
- System.out.println();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
-
-
-
-
- public void getAllTableList(String schemaName) {
- try {
-
- String[] types = { "TABLE" };
- ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);
- while (rs.next()) {
- String tableName = rs.getString("TABLE_NAME");
- String tableType = rs.getString("TABLE_TYPE");
- String remarks = rs.getString("REMARKS");
- System.out.println(tableName + "-" + tableType + "-" + remarks);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
-
-
-
-
- public void getAllViewList(String schemaName) {
- try{
- String[] types = { "VIEW" };
- ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);
- while (rs.next()){
- String viewName = rs.getString("TABLE_NAME");
- String viewType = rs.getString("TABLE_TYPE");
- String remarks = rs.getString("REMARKS");
- System.out.println(viewName + "-" + viewType + "-" + remarks);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
-
-
-
- public void getAllSchemas(){
- try{
- ResultSet rs = dbMetaData.getSchemas();
- while (rs.next()){
- String tableSchem = rs.getString("TABLE_SCHEM");
- System.out.println(tableSchem);
- }
- } catch (SQLException e){
- e.printStackTrace();
- }
- }
-
-
-
-
-
- public void getTableColumns(String schemaName, String tableName) {
-
- try{
-
- ResultSet rs = dbMetaData.getColumns(null, schemaName, tableName, "%");
- while (rs.next()){
- String tableCat = rs.getString("TABLE_CAT");
- String tableSchemaName = rs.getString("TABLE_SCHEM");
- String tableName_ = rs.getString("TABLE_NAME");
- String columnName = rs.getString("COLUMN_NAME");
- int dataType = rs.getInt("DATA_TYPE");
- String dataTypeName = rs.getString("TYPE_NAME");
- int columnSize = rs.getInt("COLUMN_SIZE");
- int decimalDigits = rs.getInt("DECIMAL_DIGITS");
- int numPrecRadix = rs.getInt("NUM_PREC_RADIX");
- int nullAble = rs.getInt("NULLABLE");
- String remarks = rs.getString("REMARKS");
- String columnDef = rs.getString("COLUMN_DEF");
- int sqlDataType = rs.getInt("SQL_DATA_TYPE");
- int sqlDatetimeSub = rs.getInt("SQL_DATETIME_SUB");
- int charOctetLength = rs.getInt("CHAR_OCTET_LENGTH");
- int ordinalPosition = rs.getInt("ORDINAL_POSITION");
-
-
-
-
-
-
-
- String isNullAble = rs.getString("IS_NULLABLE");
-
-
-
-
-
-
-
-
- String isAutoincrement = rs.getString("IS_AUTOINCREMENT");
-
- System.out.println(tableCat + "-" + tableSchemaName + "-" + tableName_ + "-" + columnName + "-"
- + dataType + "-" + dataTypeName + "-" + columnSize + "-" + decimalDigits + "-" + numPrecRadix
- + "-" + nullAble + "-" + remarks + "-" + columnDef + "-" + sqlDataType + "-" + sqlDatetimeSub
- + charOctetLength + "-" + ordinalPosition + "-" + isNullAble + "-" + isAutoincrement + "-");
- }
- } catch (SQLException e){
- e.printStackTrace();
- }
- }
-
-
-
-
-
- public void getIndexInfo(String schemaName, String tableName) {
- try{
- ResultSet rs = dbMetaData.getIndexInfo(null, schemaName, tableName, true, true);
- while (rs.next()){
- boolean nonUnique = rs.getBoolean("NON_UNIQUE");
- String indexQualifier = rs.getString("INDEX_QUALIFIER");
- String indexName = rs.getString("INDEX_NAME");
- short type = rs.getShort("TYPE");
- short ordinalPosition = rs.getShort("ORDINAL_POSITION");
- String columnName = rs.getString("COLUMN_NAME");
- String ascOrDesc = rs.getString("ASC_OR_DESC");
- int cardinality = rs.getInt("CARDINALITY");
- System.out.println(nonUnique + "-" + indexQualifier + "-" + indexName + "-" + type + "-" + ordinalPosition + "-" + columnName + "-" + ascOrDesc + "-" + cardinality);
- }
- } catch (SQLException e){
- e.printStackTrace();
- }
- }
-
-
-
-
-
- public void getAllPrimaryKeys(String schemaName, String tableName) {
- try{
- ResultSet rs = dbMetaData.getPrimaryKeys(null, schemaName, tableName);
- while (rs.next()){
- String columnName = rs.getString("COLUMN_NAME");
- short keySeq = rs.getShort("KEY_SEQ");
- String pkName = rs.getString("PK_NAME");
- System.out.println(columnName + "-" + keySeq + "-" + pkName);
- }
- }catch (SQLException e){
- e.printStackTrace();
- }
- }
-
-
-
-
-
- public void getAllExportedKeys(String schemaName, String tableName) {
-
- try{
- ResultSet rs = dbMetaData.getExportedKeys(null, schemaName, tableName);
- while (rs.next()){
- String pkTableCat = rs.getString("PKTABLE_CAT");
- String pkTableSchem = rs.getString("PKTABLE_SCHEM");
- String pkTableName = rs.getString("PKTABLE_NAME");
- String pkColumnName = rs.getString("PKCOLUMN_NAME");
- String fkTableCat = rs.getString("FKTABLE_CAT");
- String fkTableSchem = rs.getString("FKTABLE_SCHEM");
- String fkTableName = rs.getString("FKTABLE_NAME");
- String fkColumnName = rs.getString("FKCOLUMN_NAME");
- short keySeq = rs.getShort("KEY_SEQ");
-
-
-
-
-
-
-
-
-
- short updateRule = rs.getShort("UPDATE_RULE");
-
-
-
-
-
-
-
-
-
- short delRule = rs.getShort("DELETE_RULE");
- String fkName = rs.getString("FK_NAME");
- String pkName = rs.getString("PK_NAME");
-
-
-
-
-
-
-
- short deferRability = rs.getShort("DEFERRABILITY");
-
- System.out.println(pkTableCat + "-" + pkTableSchem + "-" + pkTableName + "-" + pkColumnName + "-"
- + fkTableCat + "-" + fkTableSchem + "-" + fkTableName + "-" + fkColumnName + "-" + keySeq + "-"
- + updateRule + "-" + delRule + "-" + fkName + "-" + pkName + "-" + deferRability);
- }
- } catch (SQLException e){
- e.printStackTrace();
- }
- }
-
-
- public void colseCon() {
- try {
- if (con != null) {
- con.close();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
-
- public static void main(String[] args) {
- DatabaseMetaDateApplication metaData = new DatabaseMetaDateApplication();
-
-
-
-
-
-
-
- metaData.getAllExportedKeys(null, "zsc_admin");
-
-
- }
-
-
- }