3

を介して複数の列にまたがるインデックスの列名を取得する方法を知っている人はいますか (を参照) SQLJDBCすべてのインデックス列を取得する方法は知っていますが (コードを参照)、この方法では、どの列が単一のインデックスにリンクされているかを確認できません。

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

複数列インデックスの場合、同じ INDEX_NAME で異なる COLUMN_NAME を持つ複数のエントリが ResultSet に返されます。

于 2013-05-03T12:06:45.813 に答える
0

一般的なアドバイス: Stackoverflow で質問する前に、利用可能な情報があるかどうかを確認したい場合は、 Java API の javadocを参照してください。の Javadoc をDatabaseMetaData.getIndexInfo()見ると、返された結果セットにはCOLUMN_NAME.

INDEX_NAMEあなたの目的のために、 and多分も見る必要がありますORDINAL_POSITION(インデックス内の列の順序を知りたい場合)。複合インデックスの場合、 にResultSetは複数の行が含まれます (つまり、インデックスの列ごとに 1 つの行)。

私の答えは、JDBC ドライバーが必要なすべての情報を正しく実装して返すことを前提としています。

于 2013-05-03T12:08:15.420 に答える