Buscar
Social
Ofertas laborales ES
« JavaHispano Podcast - 159 - Entrevista a Manuel Delgado | Main | Finite State Machine 4 java »
viernes
sep062013

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

 

PrintView Printer Friendly Version

EmailEmail Article to Friend

Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>