• JDBC: DatabaseMetaData


    Table of Contents

    Through the java.sql.DatabaseMetaData interface you can obtain meta data about the database you have connected to. For instance, you can see what tables are defined in the database, and what columns each table has, whether given features are supported etc.

    The DatabaseMetaData interface contains a lot of methods, and not all of them will be covered in this tutorial. You should check out the JavaDoc's. This text will just cover enough to give you a feeling for what you can do with it.

    Obtaining a DatabaseMetaData Instance

    You obtain the DatabaseMetaData object from a Connection, like this:

    DatabaseMetaData databaseMetaData = connection.getMetaData();
    

    Once you have obtained this DatabaseMetaData instance, you can call methods on it to obtain the meta data about the database.

    Database Product Name and Version

    You can obtain the database product name and version, like this:

    int    majorVersion   = databaseMetaData.getDatabaseMajorVersion();
    int    minorVersion   = databaseMetaData.getDatabaseMinorVersion();
    
    String productName    = databaseMetaData.getDatabaseProductName();
    String productVersion = databaseMetaData.getDatabaseProductVersion();
    

    If you already know exactly what database your application is running against, you may not need this. But, if you are developing a product that needs to be able to run against many different database products, this information can be quite handy in determining what database specific features it supports, SQL it supports etc.

    Database Driver Version

    You can obtain the driver version of the JDBC driver used, like this:

    int driverMajorVersion = databaseMetaData.getDriverMajorVersion();
    int driverMinorVersion = databaseMetaData.getDriverMinorVersion();
    

    Again, if your application runs against a very specific database, this may not really be so informative. However, for applications that need to be able to run against many different database products and versions, knowing the exact version of the used driver may be an advantage. For instance, a certain driver version may contain a bug that the application need to work around. Or, the driver may be missing a feature that the application then needs to work around.

    Listing Tables

    You can obtain a list of the defined tables in your database, via the DatabaseMetaData. Here is how that is done:

    String   catalog          = null;
    String   schemaPattern    = null;
    String   tableNamePattern = null;
    String[] types            = null;
    
    ResultSet result = databaseMetaData.getTables(
        catalog, schemaPattern, tableNamePattern, types );
    
    while(result.next()) {
        String tableName = result.getString(3);
    }
    

    First you call the getTables() method, passing it 4 parameters which are all null. The parameters can help limit the number of tables that are returned in the ResultSet. However, since I want all tables returned, I passed null in all of these parameters. See the JavaDoc for more specific details about the parameters.

    The ResultSet returned from the getTables() method contains a list of table names matching the 4 given parameters (which were all null). This ResultSet contains 10 columns, which each contain information about the given table. The column with index 3 contains the table name itself. Check the JavaDoc for more details about the rest of the columns.

    Listing Columns in a Table

    You can obtain the columns of a table via the DatabaseMetaData too. Here is how:

    String   catalog           = null;
    String   schemaPattern     = null;
    String   tableNamePattern  = "my_table";
    String   columnNamePattern = null;
    
    
    ResultSet result = databaseMetaData.getColumns(
        catalog, schemaPattern,  tableNamePattern, columnNamePattern);
    
    while(result.next()){
        String columnName = result.getString(4);
        int    columnType = result.getInt(5);
    }
    

    First you call the getColumns() method, passing 4 parameters. Of these, only the tableNamePattern is set to a non-null value. Set it to the name of the table you want to obtain the columns of.

    The ResultSet returned by the getColumns() method contains a list of columns for the given table. The column with index 4 contains the column name, and the column with index 5 contains the column type. The column type is an integer matching one of the type constants found in java.sql.Types

    To get more details about obtaining column information for tables, check out the JavaDoc.

    Primary Key for Table

    It is also possible to obtain the primary key of a table. You do so, like this:

    String   catalog   = null;
    String   schema    = null;
    String   tableName = "my_table";
    
    ResultSet result = databaseMetaData.getPrimaryKeys(
        catalog, schema, tableName);
    
    while(result.next()){
        String columnName = result.getString(4);
    }
    

    First you call the getPrimaryKeys() method, passing 3 parameters to it. Only the tableName is non-null in this example.

    The ResultSet returned by the getPrimaryKeys() method contains a list of columns which make up the primary key of the given table. The column with index 4 contains the column name.

    A primary key may consist of multiple columns. Such a key is called a compound key. If your tables contains compound keys, the ResultSet will contain multiple rows. One row for each column in the compound key.

    Supported Features

    The DatabaseMetaData object also contains information about the features the JDBC driver and the database supports. Many of these features are represented by a method you can call, which will return true or false depending on whether the given feature is supported or not.

    I will not cover all the feature support related methods here. I will just give you a few examples. Consult the JavaDoc for a full list of feature support methods, and their meaning.

    databaseMetaData.supportsGetGeneratedKeys();
    
    databaseMetaData.supportsGroupBy();
    
    databaseMetaData.supportsOuterJoins();
  • 相关阅读:
    终于明白迅雷使用积分制的真正作用和目的了(教大家改迅雷)
    免费搞QQ空间
    终于明白迅雷使用积分制的真正作用和目的了(教大家改迅雷)
    终于明白迅雷使用积分制的真正作用和目的了(教大家改迅雷)
    免费搞QQ空间
    免费搞QQ空间
    如何配置Windows Live Writer
    求PI的近似值,用公式PI/4=11/3+1/51/7+...
    求31000之间的素数
    通过Office 2007发布Blog
  • 原文地址:https://www.cnblogs.com/hephec/p/4562945.html
Copyright © 2020-2023  润新知