我想编写一个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连接对象就如何将表的所有索引设置为活动或非活动提供一些提示?
解决方法:
您必须在主键(使用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