Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Obtener Metadatos de una base de datos

Obtener Metadatos de una base de datos

Autor jc mouse jueves, junio 27, 2019

La clase de java DatabaseMetaData nos permite obtener informaci贸n exhaustiva sobre una base de datos, para ser m谩s exactos de un Database Management System (DBMS), es decir , de un Sistema de administraci贸n de bases de datos.

Metadatos: Datos que describen los datos que se almacenan en una fuente de datos 馃檪

En este post veremos un ejemplo sencillo de c贸mo usar聽DatabaseMetaData聽para obtener informaci贸n relevante de nuestra base de datos de prueba “TutorialJava”. No se entrara a detallar toda posible informaci贸n que se pueda obtener a trav茅s de esta clase ya que es bastante.

Nuestro objetivo es conocer, los datos de nuestra DBMS, versi贸n, usuario y drivers. Cantidad y nombre de las tablas (vistas incluidas), detallar las columnas de una tabla, de la tabla “alumnos” para ser precisos, listar los procedimientos y funciones almacenados.

Para la extracci贸n de los metadatos se usan una serie de par谩metros los cuales se describe a continuaci贸n:

  • catalog (Catalogo de Datos) : En nuestro ejemplos es “TutorialJava“, puede ser tambi茅n NULL para indicar el catalogo actual.
  • schemaPattern (Patr贸n de Esquema): Colocamos null,聽聽lo que significa que el nombre del esquema no debe utilizarse para limitar la b煤squeda.
  • tableNamePattern (Patr贸n de nombre de tabla): Utilizamos el s铆mbolo “%” para indicar que queremos todas las tablas.
  • types (Tipos): Es un array de tipo String donde indicamos el tipo de tablas que queremos聽 (normales, vistas, etc). Si ponemos null nos devolver谩 todos los tipos de tablas.
  • columnNamePattern (Patr贸n de nombre de columna): En nuestro ejemplo es la tabla llamada “alumno“.
  • procedureNamePattern (Patr贸n de nombre de procedimiento): el nomnbre del procedimiento del cual queremos los datos, al igual que en聽 tableNamePattern podemos usar “%” para obtener todos los procedimientos.
  • functionNamePattern (Patr贸n de nombre de funci贸n): Igual a聽procedureNamePattern.

Nuestra base de datos “TutorialJava” tiene la siguiente estructura:

java tutorial db

El c贸digo java para extracci贸n de metadatos es el siguiente:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public class Main {

    public static void main(String[] args) {

        String catalog = null;
        String schemaPattern = null;
        String tableNamePattern = null;
        String[] types = null;
        String columnNamePattern = null;
        String procedureNamePattern = null;
        String functionNamePattern = null;

        try (Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/TutorialJava", "root", "")) {
            System.out.println("Conectado a la base de datos");

            catalog = connection.getCatalog();
            schemaPattern = connection.getSchema();
            //Se obtienen metadatos
            DatabaseMetaData databaseMetaData = connection.getMetaData();

            //Datos generales
            System.out.println("\nDATOS GENERALES\n---------------");
            System.out.println("Producto: " + databaseMetaData.getDatabaseProductName());
            System.out.println("Version: " + databaseMetaData.getDatabaseProductVersion());
            System.out.println("Usuario: " + databaseMetaData.getUserName());

            System.out.println("Driver: " + databaseMetaData.getDriverName());
            System.out.println("Version: " + databaseMetaData.getDriverVersion());

            //Tablas
            System.out.println("\nTABLAS\n---------------");
            tableNamePattern = "%";
            ResultSet rs = databaseMetaData.getTables(catalog, schemaPattern, tableNamePattern, types);
            while (rs.next()) {
                System.out.println("Tabla: '" + rs.getString("TABLE_NAME") + "'");
            }

            //columnas de una tabla
            System.out.println("\nCOLUMNAS DE TABLA 'Alumno'\n---------------");
            tableNamePattern = "alumno";
            rs = databaseMetaData.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
            while (rs.next()) {
                System.out.println("Columna: '" + rs.getString("COLUMN_NAME")
                        + "' de tipo: " + rs.getString("TYPE_NAME"));
            }

            //Procedimientos almacenados
            System.out.println("\nPROCEDIMIENTOS ALMACENADOS\n---------------");
            procedureNamePattern = "%";
            rs = databaseMetaData.getProcedures(catalog, schemaPattern, procedureNamePattern);
            while (rs.next()) {
                System.out.println("Procedimiento: '" + rs.getString("PROCEDURE_NAME")
                        + "' de tipo: " + rs.getString("PROCEDURE_TYPE"));
            }
            //donde TYPE_NAME:
            //0: Desconocido 
            //1: Procedimiento
            //2: Funcion

            //Funciones
            System.out.println("\nFUNCIONES\n---------------");
            functionNamePattern = "%";
            rs = databaseMetaData.getFunctions(catalog, schemaPattern, functionNamePattern);
            while (rs.next()) {
                System.out.println("Funcion: '" + rs.getString("FUNCTION_NAME")
                        + "' de tipo: " + rs.getString("FUNCTION_TYPE"));
            }
            //donde FUNCTION_TYPE
            //0: No se puede determinar si se devolver谩 un valor devuelto o una tabla
            //1: funcion no retorna tabla
            //2: funcion retorna tabla

            connection.close();
            System.out.println("\nDesconectado a la base de datos");
        } catch (SQLException ex) {
            System.err.println(ex.getMessage());
        }

    }

}

Ejecutando obtenemos:

metadatos DBMS

Esperamos que este post le haya dado una idea b谩sica sobre c贸mo puede acceder a los metadatos de su fuente de datos.

enjoy!

Tags

Si te ha gustado podr铆as compartirlo o dejar un comentario. 隆Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnolog铆a en Bolivia.

Toda la informaci贸n que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si as铆 lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

Tambi茅n Te Podr铆a Interesar

Material Design: CardView (Tarjetas)

Material Design: CardView (Tarjetas)

Un CardView聽es parte de los estilos de Material Design y nos permite mostrar informaci贸n dentro de tarjetas (Card), esta...

Duplicando objetos con la Interface Cloneable

Duplicando objetos con la Interface Cloneable

En este post aprenderemos lo que es la clonaci贸n聽de objetos en java o lo que es lo mismo, generaci贸n de nuevas instancia...

Envio de correo gmail con PHPMailer

Envio de correo gmail con PHPMailer

En este tutorial utilizaremos la聽librer铆a聽PHPMailer para enviar correo聽electr贸nico聽utilizando el servidor de GMail de Go...

Tomar fotos con la camara y guardar en la sdcard

Tomar fotos con la camara y guardar en la sdcard

En este post realizaremos una aplicaci贸n android que har谩 uso de la c谩mara del celular para tomar una foto y guardarla e...

Construye tu aplicaci贸n de mensajeria

Construye tu aplicaci贸n de mensajeria

En este post crearemos una aplicaci贸n sencilla para mandar mensajes de texto desde android. Necesitamos IDE: Eclipse + S...

PicarOS: Sistema Operativo Educativo para ni帽os

PicarOS: Sistema Operativo Educativo para ni帽os

PicarOS Diego es una distribuci贸n聽GNU/Linux basada en Debian enfocada principalmente en la educaci贸n dentro del aula rec...

1 comentario en “Obtener Metadatos de una base de datos”

  1. jmnieto dice:

    Lo he probado con SQLITE y salvo tema funciones, perfecto.

    Gracias.
    jmnieto

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

脷ltimas entradas

En la convenci贸n de Chain React聽 en Portland (Oregon), Marc Horowitz ingeniero de software en Facebook present贸 el motor...

En un post anterior [Introducci贸n a VueJS framework para el desarrollo FrontEnd] realizamos una breve introducci贸n a Vue...

La programaci贸n y la electr贸nica est谩n a la orden del d铆a. Cada vez son m谩s importantes y pr谩cticamente forman parte de...

Vue.js es un framework progresivo para la creaci贸n de interfaces de usuario de una sola p谩gina creado por Evan You. Pero...

Android Bolivia

MAUS