2010-02-06 15 views
9

Estoy escribiendo una aplicación Java. Tengo un ResultSet. Ahora quiero averiguar el nombre del coloumn de la clave principal de la tabla.¿Cómo puedo obtener el nombre de columna de la clave principal de una tabla de base de datos del objeto ResultSet o ResultSetMetaData en JAVA?

Es posible obtener ese nombre de columna a través del objeto ResultSet u Objeto ResultSetMetaData o de cualquier otro modo.

No encontré ninguna manera de encontrar esto.

+1

¿Qué hay de malo en mirar la base de datos para ver cómo se definió la tabla? Cuando hay múltiples restricciones de clave únicas, una puede ser "primaria" en lo que respecta a los usuarios y una clave sustituta se define como primaria en la base de datos. ¿Por qué quieres probar y automatizar esto? –

Respuesta

9

No. Usted no recibirá esa información de conjunto de resultados o ResultSetMetadata.

Lo que quiere usar para eso es DatabaseMetadata clase. Desde esa clase, marque método getPrimaryKeys para obtener la información que desea.

Por supuesto, para usar esto, necesitará saber el nombre de la tabla.

+0

¿Qué significa "catálogo" y "esquema"? ¿El "esquema" se refiere al nombre de la base de datos? –

+0

@Yatendra, ¿qué DB estás usando? Esos son comunes en DB2. Si usa eclipse y se conecta con la vista "Desarrollo de base de datos", podrá resolverlo por su cuenta. – ericp

+0

@ericp, estoy usando Eclipse IDE y la base de datos MySQL. Pero no quiero que mi código dependa de ninguna base de datos en particular. –

0

Una buena herramienta que puede usar para verificar la información de metadatos es dbVisualizer.

Utiliza los metadatos JDBC para recuperar definiciones de tabla y otras partes de la base de datos. El esquema y el catálogo son columnas en la vista de definición de tabla, por lo que puede verificar qué valores están en estas columnas para su base de datos favorita.

dbVisualizer está disponible en una versión básica gratuita.

3

Quiero agregar, si en una tabla tiene campo autoincrement, debe ser la clave principal. Por lo tanto, el código podría tener este aspecto:

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

Se utiliza ResultSetMetaData.

+0

Esto fallaría si la clave principal no es una identidad. –

+0

Quizás mi experiencia se limite a MySQL, pero en MySQL, una autoincrementación debe ser una clave principal. Cmiiw. – swdev

Cuestiones relacionadas