此方法检索表索引的描述。它接受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