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:
Nuestra base de datos «TutorialJava» tiene la siguiente estructura:
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:
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!
A continuación te muestro 4 herramientas online para programadores en lenguaje Java y otros lenguajes de programación co[...]
En un post anterior vimos la forma de conectarnos a una base de datos Access con C#, pero de nada nos sirve solo conecta[...]
En este post personalizaremos un componente JComboBox para que sus elementos acepten tablas (JTable) en lugar de texto s[...]
Tenemos un archivo de base de datos Access *.MDB y queremos realizar una consulta con parámetros de búsqueda utilizando[...]
Cuando se realizan trabajos donde se necesita mostrar al cliente un determinado monto de dinero, tipo factura, recibo, c[...]
Pyodide es un proyecto experimental de Mozilla que proporciona un intérprete de Python que se ejecuta completamente en[...]