从java中获取在数据库中声明的所有索引

时间:2010-09-07 06:12:04

标签: java database jdbc

是否有任何标准java api返回数据库中声明的索引。我尝试在数据库元数据中使用getIndexInfo()但似乎期望表名作为输入并且不符合我的要求。 THX。

3 个答案:

答案 0 :(得分:3)

在表格上声明索引。因此,您应首先使用DatabaseMetaData.getTables()检索所有表,然后遍历表名以获取所有索引。

答案 1 :(得分:1)

不,你需要关闭一些sql,这会根据你使用的DBMS而有所不同。

例如,DB2将是: -

select * from sysibm.sysindexes where tbcreator = 'IMPACT';

对于sqlite,它将是: -

Select * from sqlite_master where type = 'index';

答案 2 :(得分:0)

没有100%可移植的“查询”方式,但是很多数据库都实现了标准的INFORMATION_SCHEMA,所以你可以这样查询。

    sql = "select TABLE_NAME, INDEX_NAME, NON_UNIQUE, COLUMN_NAME " +
            "from INFORMATION_SCHEMA.STATISTICS " +
            "where TABLE_SCHEMA = ? " +
            "order by TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX";

MySQL和SQLServer支持这一点。 Oracle没有。

请参阅this page

编辑:我最初说“没有100%可移植的方式”,但是你可以使用JDBC元数据API来实现这一点,但是如前面的答案所述,根据表的数量,这可能是低效的。