3

有谁知道如何通过 获取跨多个列(参见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");
}
4

2 回答 2

3

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

于 2013-05-03T12:06:45.813 回答
0

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

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

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

于 2013-05-03T12:08:15.420 回答