通过JDBC显示多列索引的列名

时间:2013-05-03 11:56:12

标签: java database jdbc

是否有人知道如何通过SQL获取跨多个列的索引的列名(请参阅JDBC)?我知道如何获取所有索引列(请参阅代码),但这样我无法看到哪些列链接到单个索引。

CREATE TABLE IF NOT EXISTS `foo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `test1` int(11) NOT NULL,
  `test2` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `test1` (`test1`,`test2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

DatabaseMetaData md = connection.getMetaData(); // assumed that connection exists
ResultSet rs = md.getIndexInfo(null, dbSchema, "foo", true, false);
while (rs.next()) {
    String columnName = rs.getString("COLUMN_NAME");
}

2 个答案:

答案 0 :(得分:2)

对于多列索引,将在ResultSet中返回多个条目,其中包含相同的INDEX_NAME但不同的COLUMN_NAME

答案 1 :(得分:0)

一般建议:如果您想在Stackoverflow上提问之前查看某些信息是否可用,请查看Java API javadoc。如果您查看DatabaseMetaData.getIndexInfo()的Javadoc,您会看到返回的结果集包含的列数远远超过COLUMN_NAME

出于您的目的,您还应该查看INDEX_NAMEORDINAL_POSITION(如果您想知道索引中列的顺序)。对于复合索引,ResultSet包含多行(即索引中每列一行)。

我的回答确实假设您的JDBC驱动程序正确实现并返回所有必需的信息。