为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8_20230808_rev197096_x86_rh6_64
【问题描述】*:通过JDBC读取表的索引信息,
maven版本如下:
<dependency>
<groupId>com.dameng</groupId>
<artifactId>dm-jdbc</artifactId>
<version>1.8</version>
</dependency>
代码如下:
DatabaseMetaData dbMetaData = connection.getMetaData();
resultSet = dbMetaData.getIndexInfo(catalog, schema, tableName, false, false);
Set<String> keys = getColumnNames(resultSet);
while (resultSet.next()) {
IndexInfo indexInfo = new IndexInfo();
String type = resultSet.getString("TYPE");
if (keys.contains("TABLE_CAT")) {
indexInfo.setTableCat(resultSet.getString("TABLE_CAT"));
}
if (keys.contains("TABLE_SCHEM")) {
indexInfo.setTableSchema(resultSet.getString("TABLE_SCHEM"));
}
if (keys.contains("TABLE_NAME")) {
indexInfo.setTableName(resultSet.getString("TABLE_NAME"));
}
if (keys.contains("NON_UNIQUE")) {
indexInfo.setNonUnique(resultSet.getBoolean("NON_UNIQUE"));
}
if (keys.contains("INDEX_QUALIFIER")) {
indexInfo.setIndexQualifier(resultSet.getString("INDEX_QUALIFIER"));
}
if (keys.contains("INDEX_NAME")) {
indexInfo.setIndexName(resultSet.getString("INDEX_NAME"));
}
if (keys.contains("TYPE")) {
indexInfo.setType(resultSet.getShort("TYPE"));
}
if (keys.contains("ORDINAL_POSITION")) {
indexInfo.setOrdinalPosition(resultSet.getShort("ORDINAL_POSITION"));
}
if (keys.contains("COLUMN_NAME")) {
indexInfo.setColumnName(resultSet.getString("COLUMN_NAME"));
}
if (keys.contains("ASC_OR_DESC")) {
indexInfo.setAscOrDesc(resultSet.getString("ASC_OR_DESC"));
}
if (keys.contains("CARDINALITY")) {
indexInfo.setCardinality(resultSet.getInt("CARDINALITY"));
}
if (keys.contains("PAGES")) {
indexInfo.setPages(resultSet.getLong("PAGES"));
}
if (keys.contains("FILTER_CONDITION")) {
indexInfo.setFilterCondition(resultSet.getString("FILTER_CONDITION"));
}
indexInfos.add(indexInfo);
读取结果没有可以区分主键索引和普通索引的属性,请问是否有办法解决?
您好 INDEX开头的为系统默认场景的索引,可以考虑下查询all_indexes来区别
SELECT i.table_name, i.index_name, CASE WHEN u.index_name IS NOT NULL THEN 'PRI' ELSE 'SEC' END AS index_type FROM all_indexes i LEFT JOIN all_constraints u ON i.index_name = u.index_name