Не существует 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, который достигнет этого, однако, как отмечалось в предыдущем ответе, это может быть неэффективно в зависимости от количества таблиц.