JTagua

Inicio » JDBC » Migración y Metadatos en MySQL con JDBC.

Migración y Metadatos en MySQL con JDBC.


¿Qué es un metadato?

Cualquier información respecto de un dato de una base de datos que nos ayuda a comprenderlo o utilizarlo. Los primeros metadatos de interés son aquellos que tienen que ver con la estructura de una base de datos: Tablas, Filas, Columnas …

Existe una gran variedad de métodos en el API DataBaseMetaData que nos permiten conocer los metadatos de una base de datos.

En java, las clases DataBaseMetaData y ResultSetMetaData permiten, respectivamente, analizar la estructura de una base de datos (qué tablas tiene, que columnas cada tabla, de qué tipos, etc) o de un ResultSet de una consulta, para averiguar cuántas columnas tiene dicho ResulSet, de qué columnas de base de datos proceden, de qué tipo son, etc.

Y así por ejemplo, una vez obtenido un objeto connection de forma adecuada podemos hacer

DataBaseMetaData metaDatos = con.getMetaData();

donde con es el objeto connection y metaDatos es el objeto.

A partir de aquí, podemos averiguar cuantos y cuáles son los catálogos de la base de datos,

ResultSet catalogos = metaDatos.getCatalogs();

y recorrer el conjunto de datos para escribirlo en pantalla, por ejemplo,

while (catalogos.next()) {
out.println( catalogos.getString(1)+”<br>”);
}

Para ver las tablas de cierto esquema

ResultSet resul = metaDatos.getTables(null, null, “%”, null);

donde los cuatro parámetros que hemos pasado son:

  • catálogo de la base de datos. Al poner null, estamos preguntando por el catálogo actual, que en nuestro ejemplo es de la cadena de conexión, “rs23“.
  • Esquema de la base de datos. Al poner null, es el actual.
  • Patrón para las tablas en las que tenemos interés. En SQL el carácter que indica “todo” es %, equivalente al * a la hora de listar ficheros. Esto nos dará todas las tablas del catálogo y esquema actual. Podríamos poner cosas como “usu%“, con lo que obtendríamos todas las tablas cuyo nombre empiece por “usu“.
  • El cuarto parámetro es un array de String, en el que pondríamos qué tipos de tablas queremos (normales, vistas, etc). Al poner null, nos devolverá todos los tipos de tablas.

Una vez obtenido el conjunto de datos resul, puede recorrerse con un bucle while como en métodos anteriores, teniendo en cuenta que

resul.tablas.getString(1), entrega el catálogo,

resul.tablas.getString(2), entrega el esquema,

resul.tablas.getString(3), entrega el nombre de la tabla.

resul.tablas.getString(4), entrega el tipo de tabla (TABLE, VIEW, SYSTEM TABLE, …)

resul.tablas.getString(5), entrega la descripción de la tabla.

Finalmente, podemos obtener para cada tabla las columnas que la componen: su nombre y tipo. Para ello, podemos usar el método getColumns() de DataBaseMetaData.

ResultSet resul = metaDatos.getColumns(catalogo, null, tabla, null);

en el que los parámetros de la llamada son:

  • El nombre del catálogo al que pertenece la tabla.
  • El nombre del esquema, null para el esquema actual.
  • El nombre de la tabla. Nuevamente podríamos poner comodines al estilo SQL para obtener, por ejemplo, las columnas de todas las tablas “person%” que empiecen por person.
  • El nombre de las columnas buscadas, usando comodines. null nos devuelve todas las columnas.

El contenido del ResultSet será una fila por cada columna de la tabla. Las columnas del ResultSet mas utilizadas son el nombre de la columna de la tabla y el nombre del tipo de dato de la columna, es decir, nos interesa

resul.tablas.getString(4), entrega el nombre de la columna,

resul.tablas.getString(6), entrega el tipo de dato de una columna.


Migración de MsAccess a MySQL.

En este ejercicio trabajaremos de nuevo con la base de datos del Departamento de Agricultura de los Estados Unidos, sólo que en lugar de hacer uso de la base de datos de MsAccess migraremos el archivo sr23.mdb a MySQL. Para hacer esto iniciamos la utilidad “MySQL Migration Toolkit “, es decir:

Hacemos ahora Next,

Hacemos Next,


Indicamos el sistema gestor de base de datos de la base de datos que deseamos migrar, en nuestro caso, MsAccess, e indicamos la localización de dicha base de datos (sr23.mdb), hacemos next,

donde hemos tomado como Hostname “localhost” y hemos introducido el usuario y password del administrador de MYSQL. Si hacemos Next ahora,

en esta pantalla vemos que se ha producido las dos conexiones a las dos bases de datos, si hacemos Next,

Vemos que se ha creado un nuevo esquema (base de datos) en MySQL con el mismo nombre que la base de datos origen. Seleccionamos dicho esquema y pulsamos Next

Vemos que todos los preparativos están OK. Pulsamos seguidamente Next

Observamos que la base de datos que se va a emigrar contiene 13 tablas (aquí tenemos la posibilidad de personalizar y por tanto migrar exclusivamente aquellas tablas que nos interesen). Hacemos Next,

Desde aquí podemos parametrizar la migración o adoptar una migración standard. Hacemos Next,

Vemos que las operaciones previas se han realizado con éxito. Hacemos seguidamente Next,

Comprobamos que el mapeo de las tablas y de los campos de estas tablas se ha realizado con éxito entre las dos bases de datos. Hacemos ahora Next,

A partir de esta pantalla podemos “crear los objetos” de la base de datos, es decir, las tablas, vistas, procedimientos almacenados etc.. y/o crear simplemente un fichero de script de todo el proceso de migración. Hacemos Next,

Comprobamos que se crean con éxito el esquema de la base de datos y las tablas. Hacemos Next,

Nuevas comprobaciones. Hacemos Next,

Desde esta pantalla podemos migrar todos los datos de todos los objetos o dejarlo para otra ocasión y crear un script para procesar de nuevo la migración. Hacemos Next,

Cuando aparezca esta pantalla la transferencia de datos ha concluido. Hacemos Next,

y finalmente Finish, si no queremos salvar el script que compendia toda la operación de migración.

Finalmente, vamos a realizar un backup de esta base de datos, para ello vamos a “MySQL Administrator” y seleccionamos “backup”,

Hacemos click ahora en New Project,

donde hemos selecciona el esquema o base de datos sr23. Si hacemos ahora Save Project y finalmente Execute Backup

EJERCICIO1:

En este ejercicio trabajaremos de nuevo con la base de datos del Departamento de Agricultura de los Estados Unidos, sólo que en lugar de hacer uso de la base de datos de MsAccess trabajaremos con la correspondiente una ver que ha migrado a MYSQL.

El ejercicio consiste en replicar el ejercicio 2 del Tutorial de JSP (): cambiando tanto el driver como la cadena de conexión a la base de datos. Si todo funciona bien, que es lo esperado, queda PROBADO QUE UNA VEZ SE TENGA UNA APLICACIÓN QUE GESTIONE UNA BASE DE DATOS A TRAVÉS DE JDBC, ÉSTA FUNCIONARÁ CON CUALQUIER OTRA BASE DE DATOS SIN MAS QUE CAMBIAR EL DRIVER Y LA CADENA DE CONEXIÓN.

Recuerde incorporar la librería de MySQL, después de haber instalado en el IDE el conector J para MYSQL.

EJERCICIO2:

En este ejercicio trabajaremos de nuevo con la base de datos del Departamento de Agricultura de los Estados Unidos, sólo que en lugar de hacer uso de la base de datos de MsAccess TRABAJAREMOS CON LA VERSIÓN sr23 en MYSQL. Tratamos de buscar el catálogo, los esquemas de bases de datos, las tablas para un esquema dado y las columnas para una tabla dada.

Iniciamos un nuevo proyecto en el IDE de NetBeans y sustituimos el código del fichero index.jsp por el siguiente código,

index.jsp y añadimos en el paquete pbd la clase que controla los accesos a la base de datos clase.java


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: