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