Java DatabaseMetaData getIndexInfo()方法与示例

此方法检索表索引的描述。它接受5个参数-

  • catalog-代表目录名称(通常是数据库)的字符串参数,其中存在表(包含您需要描述的索引),传递“”以获取没有目录的表中索引的描述并且,如果不想使用目录,则传递null,从而缩小搜索范围。

  • schema-一个代表表模式名称的String参数,传递“”以获取不具有模式的表中列的描述,如果不想使用模式,则传递null。

  • -表示表名称的字符串参数。

  • unique-一个布尔参数,如果为true,则此方法仅返回唯一值的索引;如果为false,则无论唯一值如何,均返回索引。

  • 近似-一个布尔型参数,如果为true,则此方法返回近似值;如果为false,则此方法返回准确值。

此方法返回描述指定索引的ResultSet对象。该对象保存以下详细信息的值(作为列名)-

栏名
数据类型
描述
TABLE_CAT

表的目录。
TABLE_SCHEM

模式的目录。
TABLE_NAME

表名。
INDEX_QUALIFIER

这表示索引目录,当type为tableIndexStatistic时为null。
INDEX_NAME

索引名称。
类型

索引的类型。
ORDINAL_POSITION

索引的序列号。
COLUMN_NAME

列名。
基数
整数
当TYPE为tableIndexStatistic时,则为表中的行数;否则,它是索引中唯一值的数量。
FILTER_CONDITION

过滤条件。


获取数据库中所需索引的描述-

  • 确保您的数据库已启动并正在运行。

  • 使用registerDriver()DriverManager类的方法注册驱动程序。传递与基础数据库相对应的驱动程序类的对象。

  • 使用getConnection()DriverManager类的方法获取连接对象。将URL和数据库中的用户密码作为字符串变量传递给数据库。

  • 使用getMetaData()Connection接口的方法获取有关当前连接的DatabaseMetaData对象。

  • 最后,通过调用getIndexInfo()DatabaseMetaData接口的方法,获取包含所需列的描述的ResultSet对象。

示例

让我们创建一个名称为sample_database的数据库,并使用CREATE语句在其中创建一个表sample_table,如下所示-

CREATE DATABASE example_database;
CREATE TABLE example_database.sample_table(Name VARCHAR(255), age INT, Location VARCHAR(255));

现在,我们将使用INSERT语句在sample_table表中插入2条记录-

insert INTO example_database.sample_table values('Kasyap', 29, 'Vishakhapatnam');
INSERT INTO example_database.sample_table values('Krishna', 30, 'Hyderabad');
Finally, create a n index with name sample_index on the above created table as:
mysql> CREATE INDEX sample_index ON sample_table (name) USING BTREE;
Records: 0 Duplicates: 0 Warnings: 0

下面的JDBC程序建立与MySQL数据库的连接,检索上面创建的索引的描述。

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DatabaseMetaData_getIndexInfo {
   public static void main(String args[]) throws SQLException {
      //注册驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //获得连接
      String url = "jdbc:mysql://localhost/example_database";
      Connection con = DriverManager.getConnection(url, "root", "password");
      System.out.println("Connection established......");
      //检索元数据对象
      DatabaseMetaData metaData = con.getMetaData();
      //检索数据库中的列
      ResultSet rs = metaData.getIndexInfo("example_database", null, "sample_table", false, false);
      //打印列名称和大小
      while (rs.next()) {
         System.out.println("Table name: "+rs.getString("Table_NAME"));
         System.out.println("Column name: "+rs.getString("COLUMN_NAME"));
         System.out.println("Column name: "+rs.getString("NON_UNIQUE"));
         System.out.println("Index name: "+rs.getString("INDEX_NAME"));
         System.out.println(" ");
      }
   }
}

输出结果

Connection established......
Table name: sample_table
Column name: Name
Column name: true
Index name: sample_index
猜你喜欢