Leer la estructura de una base de datos Oracle en Java


Oracle-rojo
En algunas ocasiones es necesario identificar la estructura de una base de datos, ya sea para mapear las tablas hacia clases o para cualquier otro procedimiento especializado. En Java este procedimiento es perfectamente posible y no es necesario contar con conocimientos tan avanzados para realizarlo. Sin más preámbulos, pasemos a la explicación...

 Paso 1: Obtener el driver
En Java, para poder acceder a una base de datos es necesario contar con el driver (o controlador) específico para dicho motor, los existen para MySQL, SQL, SQLite, Oracle, etc. En este caso necesitaremos el llamado ojdbc6.jar para Oracle que puedes descargar desde el siguiente vínculo:

Una vez que tengas el archivo necesario acorde a tu versión de Oracle necesitas ubicarlo en tu classpath o agregarlo como recurso a tu proyecto de NetBeans.
Paso 2: Crear el proyecto de NetBeans
En lo particular utilizo la que a la fecha de publicación de este artículo es la versión más reciente del NetBeans: la 7.0. Para crear el proyecto basta con dar clic en el botón de 'Nuevo Proyecto' o ir al menú Archivo -> Nuevo Proyecto.
 1
Al proyecto le titularemos MapearBDOracle, aunque solo es un nombre sugerido ya que no afecta en lo más mínimo con el comportamiento del programa.
Una vez creado el proyecto el IDE nos posicionará en la clase principal del mismo y creará por sí solo el método main desde el cual ejecutaremos todos nuestros procedimientos.
Paso 3: Crear la conexión a la base de datos
Para poder crear la conexión a la base de datos necesitaremos utilizar las clases Connection y DriverManager, ambos contenidos en el paquete java.sql por lo que será necesario importarlo de la siguiente manera:
   1:  package mapearbdoracle;
   2:    .
   3:    .
   4:    import java.sql.*;
   5:    .
   6:    .
Una vez realizado lo anterior declararemos dentro del método main un objeto de la clase Connection de la siguiente manera:
   1:  public static void main(String[] args) {
2: Connection conexion;
3: .
4: .


Dicho objeto contendrá nuestra conexión a la base de datos, misma que nos servirá para leer su estructura.
Posteriormente cargaremos el driver en la memoria...
   1:  Class.forName("oracle.jdbc.OracleDriver");
Y creamos la URL de conexión a la base de datos...
   1:  String BaseDeDatos = "jdbc:oracle:thin:@127.0.0.1:1521:ESQUEMA";
En la línea anterior es importante tomar en cuenta lo siguiente:
  • 127.0.0.1 indica la IP del servidor Oracle.
  • 1521 es el puerto de conexión por defecto.
  • ESQUEMA es el esquema al cual te vas a conectar 
Una vez formada la url creamos la conexión de la siguiente manera:
   1:  conexion = DriverManager.getConnection(BaseDeDatos, "USUARIO", "contraseña");
Aquí es necesario cambiar USUARIO por el usuario con el cual te vas a conectar y contraseña por la contraseña establecida para la conexión.
Para que pueda compilar, debemos encerrar el código anterior dentro de un try-catch...
   1:  try{
2: .
   3:      ./*codigo*/
   4:      .
   5:    }catch(Exception ex){
   6:      ex.printStackTrace();
   7:    }
Si todos los datos anteriores son correctos, al ejecutar la clase se realizará la conexión a la base de datos, sin embargo, vamos a agregar algunas líneas que nos lo indiquen en la consola de la siguiente manera...
   1:  if (conexion != null && !conexion.isClosed()) {
   2:        System.out.println("-> Conexion establecida");
   3:    }else{
   4:        System.out.println("->No fue posible crear la conexion!");
   5:    }
Ya que tenemos nuestra conexión establecida y funcionando podemos continuar con el siguiente paso.
Paso 4: Leer la estructura de la Base de Datos.
Para poder leer la estructura de la base de datos necesitaremos un objeto de tipo oracle.jdbc.OracleDatabaseMetaData, así como 3 objetos adicionales que agregaremos de la siguiente manera:
   1:  System.out.println("-> Conexion establecida");
   2:    .
   3:    .
   4:   
   5:    /*Se declara el objeto que contendrá los metadatos de la BD*/
   6:    OracleDatabaseMetaData dbmd;
   7:                  
   8:    /*Nos servirá para indicar que leeremos todas las tablas y las vistas*/
   9:    String tipos[] = new String[]{"TABLE", "VIEW"};
  10:                  
  11:    /*Almacena los datos de la estructura de la BD*/
  12:    ResultSet tablas;
  13:   
  14:    /*Almacena los nombres de las tablas y vistas*/
  15:    ArrayList<String> datos = new ArrayList();
Para obtener los metadatos de la base de datos es necesario llamar al método getMetaData() de la clase Connection y almacenar el resultado en el objeto de tipo OracleDatabaseMetaData de la siguiente manera:
   1:  dbmd = (OracleDatabaseMetaData) conexion.getMetaData();
Ahora sobre los metadatos obtenidos filtramos únicamente los del esquema, nombres y tipos requeridos...
   1:  tablas = dbmd.getTables(null, "ESQUEMA", "%", tipos);
Donde...
  • null indica el catalogo de las tablas a utilizar
  • ESQUEMA indica el esquema que contiene las tablas que deseamos obtener
  • % indica los nombres de las tablas que deseamos obtener (en este caso todas)
  • tipos indica los tipos de información que deseamos obtener, puede ser "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". En este caso solo las tablas y vistas.
Ahora solo nos basta iterar sobre los datos obtenidos en la sentencia anterior para obtener la estructura de la base de datos acorde a los parámetros establecidos...
   1:  while (tablas.next()) {
   2:       /*Se agregan los nombres de las tablas a un ArrayList*/
   3:       datos.add(tablas.getString(tablas.findColumn("TABLE_NAME")));
   4:                          
   5:       /*Se imprimen los datos en consola*/
   6:       System.out.println("Tabla: "+tablas.getString(tablas.findColumn("TABLE_NAME")));
   7:    }
Para que todo lo anterior funcione únicamente falta encerrarlo nuevamente dentro de un try-catch y ejecutarlo y listo! podrás hacer lo que necesites con los datos obtenidos.
De igual manera como puedes leer todas las tablas de una base de datos se pueden leer todos los campos de una tabla, pero eso lo dejamos para otro artículo.
Te dejo todo lo necesario para que puedas realizar este tutorial, incluyendo el código fuente ;), en un archivo descargable...

Si tienes alguna duda o algo qué decir no olvides dejar tu comentario. Si te gustó el tutorial puedes indicarlo desde los botones de la parte inferior y/o compartirlo desde los botones que se encuentran al inicio del mismo (te agradecería mucho que lo hicieras).

Saludox.

1 comentarios:

  1. Anónimo dijo...:

    Estuve intentando en phpMyAdmin y con Java el DataBaseMetaData pero algunos metosods no sirven por ejemplo getSchemas(), getImportedKeys(), no sabes otra forma de hacerlo, Gracias

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

 
Monillo007 © 2010 | Designed by Trucks, Manual Bookmarking | Elegant Themes