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