我想编写一个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
}

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

因此,谁能仅通过JDBC连接对象就如何将表的所有索引设置为 Activity 或非 Activity 提供一些提示?

最佳答案

您必须在主键(使用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作为键中断(当当前值小于前一个值时)以检测索引更改。
    阅读official DatabaseMetaData.getIndexInfo() doc

    关于java - 使用JDBC检索给定表的所有索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21001561/

    10-14 10:18
    查看更多