получить все индексы, объявленные в базе данных из Java - PullRequest
2 голосов
/ 07 сентября 2010

Существует ли какой-либо стандартный Java API, который возвращает индексы, объявленные в базе данных.Я попытался использовать getIndexInfo () в метаданных базы данных, но, похоже, ожидается, что имя таблицы будет использоваться в качестве входных данных и не соответствует моим требованиям.Thx.

Ответы [ 3 ]

3 голосов
/ 07 сентября 2010

Индексы объявлены в таблицах.Поэтому сначала вы должны извлечь все таблицы с помощью DatabaseMetaData.getTables (), а затем перебрать имена таблиц, чтобы получить все индексы.

1 голос
/ 07 сентября 2010

Нет, вам нужно запустить некоторые sql, которые будут зависеть от используемой СУБД.

Например, DB2 будет: -

select * from sysibm.sysindexes where tbcreator = 'IMPACT';

Для sqlite это будет: -

Select * from sqlite_master where type = 'index';
0 голосов
/ 07 сентября 2010

Не существует 100% переносимого способа «запроса», однако многие БД реализуют стандарт INFORMATION_SCHEMA, поэтому вы можете выполнять такие запросы.

    sql = "select TABLE_NAME, INDEX_NAME, NON_UNIQUE, COLUMN_NAME " +
            "from INFORMATION_SCHEMA.STATISTICS " +
            "where TABLE_SCHEMA = ? " +
            "order by TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX";

MySQL и SQLServer поддерживают это. Oracle не делает.

См. эту страницу

РЕДАКТИРОВАТЬ: Первоначально я сказал «нет 100% портативного способа», однако вы можете использовать API метаданных JDBC, который достигнет этого, однако, как отмечалось в предыдущем ответе, это может быть неэффективно в зависимости от количества таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...