Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Obtener Metadatos de una base de datos con java

Obtener Metadatos de una base de datos con java

Por 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

Artículos similares

Gráficos iReport con parámetros tipo Date

Matando dos pájaros de un solo tiro :), doy respuesta a un par de preguntas que están relacionadas, en este post veremos[...]

Creación de mapas con shapes – Parte 3

En nuestro mapa interactivo, se hará uso de un mapa departamental dividido en provincias, todo a través  de shapes, si b[...]

Instalador java con WinRar

En este videoTutorial veremos la forma mas sencilla de crear un instalador para programas hechos en Java utilizando el p[...]

Dia Diagram Editor

Dia Diagram Editor es un software gratuito de dibujo de código abierto para los sistemas operativos de Windows, Mac OS X[...]

Ordenación de burbuja animado

La Ordenación de burbuja (Bubble Sort en inglés) es un sencillo algoritmo de ordenamiento. Este algoritmo es esencialmen[...]

Primeros pasos con JavaFX

¿Qué es javaFX? JavaFX es una familia de productos y tecnologías de Sun Microsystems, adquirida por Oracle Corporation,[...]