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!
Cuando utilizamos aplicaciones web con conexión a base de datos MYSQL, se suele crear una clase que gestione la interacc[...]
Este post te enseña una manera que tengo de configurar Netbeans para crear y ejecutar un proyecto php utilizando el CMS[...]
En este tutorial se explica una forma de crear CD autoejecutable para programas hechos en java asi como para instalar la[...]
En este post mostramos como personalizar el Header (encabezado) de un componente JTable en Java colocando iconos, centra[...]
Una Vista (View) es una Tabla Virtual cuyo contenido está definido por una consulta (SELECT), al igual que una tabla rea[...]
Webcam Capture es un API que permite usar una cámara web incorporada o externa directamente desde código Java utilizand[...]