Obtener MetaDatos de una Base de Datos en Java
En este Articulo veremos como obtener metadatos tanto de una conexion a una base de datos, como de un Resultset cualquiera. Los metadatos son datos estructurados que describen caracteristicas de otros datos, que son en los que nos enfocamos normalmente. Algunos ejemplos de metadatos a los que nos referimos que podemos obtener son: nombre de producto, version de driver, tablas y numero de tablas, columnas y numero de columnas/filas, llaves primarias y foraneas, tipos de datos, etc.
Para obtener este tipo de informacion haremos uso de 2 Clases: DatabaseMetaData y ResultSetMetaData. DatabaseMetaData es una clase que nos permite analizar y obtener informacion sobre la estructura de una base de datos a la que estemos conectados, por su parte, ResultSetMetaData obtiene Metadatos de una consulta a traves de un ResultSet.
Ejemplo
01.
import
java.sql.*;
02.
import
java.util.logging.*;
03.
04.
/**
05.
*
06.
* @author JonathanMelgoza
07.
*/
08.
public
class
Main {
09.
static
Connection conexion;
10.
static
Statement st;
11.
static
String host=
"localhost"
, base_de_datos=
"empleados"
, usuario=
"root"
, contraseña=
"root"
;
12.
static
DatabaseMetaData metadatos;
13.
static
ResultSetMetaData rsmetadatos;
14.
15.
public
static
void
main(String args[]){
16.
try
{
17.
//INIT
18.
Class.forName(
"com.mysql.jdbc.Driver"
);
19.
conexion = DriverManager.getConnection(
"jdbc:mysql://"
+host+
"/"
+base_de_datos, usuario, contraseña);
20.
st = conexion.createStatement();
21.
22.
/*DatabaseMetaData
23.
* Obteniendo Informacion sobre una base de datos
24.
*/
25.
System.out.println(
"Obteniendo Informacion sobre una base de datos"
);
26.
metadatos = conexion.getMetaData();
27.
//Nombre de producto
28.
System.out.println(
"Nombre de Producto: "
+metadatos.getDatabaseProductName());
29.
//Version de producto
30.
System.out.println(
"Version de Producto: "
+metadatos.getDatabaseProductVersion());
31.
//Nombre de driver
32.
System.out.println(
"Nombre de Driver: "
+metadatos.getDriverName());
33.
//Version de driver
34.
System.out.println(
"Version de Driver: "
+metadatos.getDriverVersion());
35.
//Tablas
36.
ResultSet rst;
37.
ResultSet rsc;
38.
rst = metadatos.getTables(
null
,
null
,
null
,
null
);
39.
String tabla=
""
;
40.
while
(rst.next()){
41.
tabla = rst.getObject(
3
).toString();
42.
System.out.println(
"Nombre de Tabla: "
+tabla);
43.
//primary key si existe
44.
ResultSet rsp = metadatos.getPrimaryKeys(
null
,
null
, tabla);
45.
if
(rsp.next())
46.
System.out.println(
"Primary Key: "
+rsp.getObject(
4
));
47.
rsp.close();
48.
//columnas y tipos
49.
rsc = metadatos.getColumns(
null
,
null
, tabla,
null
);
50.
while
(rsc.next()){
51.
System.out.println(
" Columna "
+rsc.getString(
4
));
52.
System.out.println(
" Tipo "
+rsc.getInt(
5
));
53.
}
54.
rsc.close();
55.
}
56.
rst.close();
57.
58.
/*ResultSetMetaData
59.
* Obteniendo Informacion sobre una consulta con un ResultSet
60.
*/
61.
System.out.println(
"\nObteniendo Informacion sobre una consulta con un ResultSet"
);
62.
ResultSet rs = st.executeQuery(
"select * from personas,ciudades"
);
63.
rsmetadatos = rs.getMetaData();
64.
//obteniendo numero de columnas
65.
int
col = rsmetadatos.getColumnCount();
66.
System.out.println(
"Columnas: "
+col);
67.
for
(
int
i=
1
;i<=col;i++){
68.
System.out.println(
"Nombre de Columa: "
+rsmetadatos.getColumnName(i));
69.
System.out.println(
"Tipo de Dato: "
+rsmetadatos.getColumnTypeName(i));
70.
System.out.println(
"Pertenece a la tabla: "
+rsmetadatos.getTableName(i)+
"\n"
);
71.
}
72.
73.
74.
}
catch
(Exception ex) {
75.
Logger.getLogger(Main.
class
.getName()).log(Level.SEVERE,
null
, ex);
76.
}
77.
}
78.
}
Resultado
Mas Informacion
En este Articulo nos enfocamos solo en algunos metodos que consideramos mas utiles de los muchos que poseen estas 2 clases, si te interesa conocer todos los metodos disponibles, a continuacion te dejo algunos recursos donde puedes encontrarlos.
Obten mas Informacion de DatabaseMetaData en:
http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html
Obten mas Informacion de ResultSetMetaData en:
http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSetMetaData.html








Reader Comments