使用JDBC检索给定表的所有索引

Jac*_*ack 5 java indexing jdbc

我想编写一个SpringBatch Tasklet,它自动激活或取消激活给定数据库表的所有索引.代码需要独立于DBMS(需要SQL Server,Oracle和HSQLDB).

这是我到目前为止所尝试的:

DatabaseMetaData dbMetaData = connection.getMetaData();
ResultSet rs = dbMetaData.getIndexInfo(null, null, tableName, true, false);
while (rs.next()) {
    // work with ResultSet
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有获得索引的名称或任何有用的信息.

那么,任何人都可以提供一些关于如何使用JDBC连接对象将表的所有索引设置为活动或非活动的提示吗?

Luc*_*cci 5

您必须在主键(DatabaseMetaData.getPrimaryKeys()用于检索)和其他索引(通过dbMetaData.getIndexInfo(null, null, tableName, true, false))之间进行区分.
在你的循环中使用:

  • rs.getString("INDEX_NAME") 提取索引名称
  • rs.getBoolean("NON_UNIQUE") 提取独特的信息
  • rs.getShort("TYPE") 提取索引类型
  • rs.getInt("ORDINAL_POSITION") 提取序数位置

使用ORDINAL_POSITION作为键断裂(当当前值是<=前一个)来检测的折射率变化.
阅读官方DatabaseMetaData.getIndexInfo()doc