2010-02-06 6 views
9

Sto scrivendo un'applicazione Java. Ho un ResultSet. Ora voglio scoprire il nome della colonna della chiave primaria del tavolo.Come posso ottenere il nome della colonna della chiave primaria di una tabella di database dall'oggetto ResultSet o ResultSetMetaData in JAVA?

È possibile ottenere il nome della colonna tramite oggetto ResultSet o oggetto ResultSetMetaData o in qualsiasi altro modo.

Non ho trovato alcun modo per trovare questo.

+1

Cosa c'è che non va guardando il database per vedere come è stata definita la tabella? Quando ci sono più vincoli chiave univoci, uno potrebbe essere "primario" per quanto riguarda gli utenti e una chiave surrogata è definita come primaria nel database. Perché vuoi provare ad automatizzare questo? –

risposta

9

No. Non si ottiene che le informazioni da ResultSet o ResultSetMetaData.

Quello che si desidera utilizzare è DatabaseMetadata classe. Da quel controllo classe getPrimaryKeys metodo per ottenere le informazioni desiderate.

Naturalmente, per utilizzare questo, è necessario conoscere il nome del tavolo.

+0

Cosa significa "catalogo" e "schema"? Lo "schema" si riferisce al nome del database? –

+0

@Yatendra, che DB stai usando? Quelli sono comuni in DB2. Se usi eclipse e ti connetti con la vista "Sviluppo database", sarai in grado di capirlo da solo. – ericp

+0

@ericp, sto usando Eclipse IDE e il database MySQL. Ma non voglio che il mio codice dipenda da un particolare database. –

0

Un valido strumento che è possibile utilizzare per verificare le informazioni sui metadati è dbVisualizer.

Utilizza i metadati JDBC per recuperare le definizioni di tabella e altre parti del database. Schema e catalogo sono le colonne nella vista di definizione della tabella, in modo da poter controllare quali valori si trovano in queste colonne per il database preferito.

dbVisualizer è disponibile in una versione base gratuita.

3

Desidero aggiungere, se in una tabella è presente un campo di autoincremento, deve essere la chiave primaria. Quindi, il codice potrebbe essere la seguente:

if(metaColumn.isAutoIncrement(i)) { 
    primaryKey = metaColumn.getColumnName(i); 
    i=nColoumn+1; 
} 

utilizza ResultSetMetaData.

+0

Questo fallirebbe se la chiave primaria non fosse un'identità –

+0

Forse la mia esperienza è limitata a MySQL, ma in MySQL, un autoincremento deve essere una chiave primaria. – swdev

Problemi correlati