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!
El Método Congruencial Lineal Mixto es el más utilizado en simulación en computadoras digitales y esta basado en una rel[...]
En este post personalizaremos una tabla JTable Swing para pintar una imagen de fondo y darle un poco de estilo al e[...]
Existen muchos clientes REST disponibles tanto para instalar en tu PC como para utilizar directamente desde la nube, sin[...]
Uno de los cambios principales introducidos a las interfaces en Java 8 fue que estos puedan tener métodos concretos, es[...]
🙂 Una de las preguntas más buscadas por programadores java es la de crear componentes swing en tiempo de ejecución, eso[...]
Cuando se almacenan imágenes en una aplicación java y se desea después a modo de registro buscar estas y cargarlas en al[...]