Hi Robin.

You may access those informations thought database meta data.
Here is, as an attachment, a snippet of code to do that.


Basically, it calls getMetaData(), then getIndexInfo() to obtain info for all indexes on a given table:
        DatabaseMetaData dbmd = conn.getMetaData();
        ResultSet rs = dbmd.getIndexInfo(null, "APP", "TBL", false, false);

The resulting ResultSet contains all the relevant informations. For your needs, I think the most interesting columns will be INDEX_NAME, ORDINAL_POSITION and COLUMN_NAME.


Hope this helps,
Sylvain


Robin Bale a écrit :

Hello All,

Somebody has given me a Derby database with some unknown indexes in. I can
work out the names of all the indexes on this database, but I would like to
know the names of the columns which make up the indexes.

Does anybody have any ideas?

Thanks in advance,

Robin Bale




--
Website: http://www.chicoree.fr
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Demonstrate the use of DatabaseMetaData to retrieve index meta informations.
 * 
 * The result is of the form:
 * <pre>
 *     TABLE_CAT |       TABLE_SCHEM |        TABLE_NAME |        NON_UNIQUE |  
 INDEX_QUALIFIER |        INDEX_NAME |              TYPE |  ORDINAL_POSITION |  
     COLUMN_NAME |       ASC_OR_DESC |       CARDINALITY |             PAGES |  
FILTER_CONDITION |
 *               |               APP |               TBL |             false |  
                 |              IDX2 |                 3 |                 1 |  
               C |                 A |              null |              null |  
            null |
 *               |               APP |               TBL |             false |  
                 |SQL091026130600360 |                 3 |                 1 |  
               V |                 A |              null |              null |  
            null |
 *               |               APP |               TBL |              true |  
                 |              IDX1 |                 3 |                 1 |  
               I |                 A |              null |              null |  
            null |
 *               |               APP |               TBL |              true |  
                 |              IDX1 |                 3 |                 2 |  
               C |                 D |              null |              null |  
            null |
 * </pre>
 * @author sylvain
 *
 */
public class IndexMetaInformations {
        public static void main(String args[]) throws SQLException {    
                Connection      conn = DriverManager.getConnection(   
                                
"jdbc:derby:memory:indexMetaDataTestDB;create=true");
                
                conn.setAutoCommit(true);
                
                Statement stmt = conn.createStatement();
                stmt.execute("CREATE TABLE TBL (I INT, C CHAR(80), V 
VARCHAR(255), PRIMARY KEY(V))");
                stmt.execute("CREATE INDEX IDX1 ON TBL (I ASC, C DESC)");
                stmt.execute("CREATE UNIQUE INDEX IDX2 ON TBL (C ASC)");
                
                DatabaseMetaData dbmd = conn.getMetaData();
                ResultSet rs = dbmd.getIndexInfo(null, "APP", "TBL", false, 
false);
                
                ResultSetMetaData rsmd = rs.getMetaData();
                for(int i = 0; i < rsmd.getColumnCount(); ++i) {
                        System.out.printf("%18s |", rsmd.getColumnLabel(i+1));
                }
                System.out.println();

                while(rs.next()) {
                        for(int i = 0; i < rsmd.getColumnCount(); ++i) {
                                System.out.printf("%18s |", rs.getString(i+1));
                        }
                        System.out.println();
                }
                
                rs.close();
                stmt.close();
                conn.close();
        }
}

Reply via email to