Ir al contenido principal

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.

Comentarios

  1. 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

    ResponderBorrar

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.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.