Usar un archivo XML como una Base de Datos [Java] Parte 1/2

Buenas días (primera vez que escribo en una mañana), anoche estuve averiguando de que alternativa existía si se quería hacer una aplicación de escritorio sencilla y no tener que usar un motor de bases de datos como MySQL u otro, ya que al querer pasar la aplicación a otro equipo, pues se tendría que instalar la BD, etc etc.

Y me acorde que un archivo XML podía ser una buena estructura de datos para almacenar información ordenada como en una BD. Así que esto es lo que haremos en este post.

Por cuestiones de sencillez, no utilizare ningún tipo de UI (Swing), con pura consola bastara para dar a entender como se hace.

Este post solo tratara de leer el archivo XML ( o sea consultar información ), en la parte 2 (cuando sepa bien como hacerlo ) daremos altas, o sea agregar información al fichero XML

Clases, paquetes, etc.

Primero, crearemos un proyecto en netbeans (ando estrenando la versión 7.0), y agregaremos los siguientes paquetes y clases (estarán vacías).

image

Hay que recordar, que al crear una clase en netbeans simplemente te crea la clase y no te da mas opciones (como en eclipse que te da oportunidad de agregar método main y asi). Así que a la clase MainClass le agregaremos el método Main (public static void main(String args[]){}), si no entendieron igual mas delante iremos viendo las clases.

Ahora lo que haremos sera crear el archivo XML, lo podemos crear desde netbeans. nos podemos ir a la pestaña “Files” para que desde alli navegar y crear una carpeta y un archivo XML.

image

image

Como ven no hubo necesidad de entrar al explorador de windows, esto para no distraernos ( haha ), y seguir con ritmo en netbeans, esa carpeta la llamaremos “xmlsrc”, y dentro de esta crearemos un archivo XML (alli les señale donde se encuentra para crear un archivo XML)

Crearemos un “XML Document”  y lo nombraremos “basededatos” y al crearlo nos preguntara si este esta relacionado a un DTD, le ponemos en “Well-formed Document” y finalizamos.

Se nos abrira el siguiente archivo XML

image

La etiqueta <root> la eliminamos para hacer la siguiente estructura.

image

El nodo principal es basededatos, y tiene un nodo hijo que son personas, aquí vamos agregar las personas que se deseen (siempre debajo de personas, es por eso necesario un DTD diría yo).

Definiendo la clase Personas

Ahora nos vamos a la clase personas, del cual agregaremos los siguientes atributos privados.

image

y debajo de estos, daremos clic derecho y le damos en “Insert Code” y despues en “getter and setter”

image

Y nos aparecera la siguiente ventana.

imageSeleccionamos todos los atributos dando clic a la clase y damos en generate, asi se nos genero un método set y get para cada atributo que habíamos agregado, asi ya tenemos propiedades que definen nuestra clase.

Definiendo la clase PersonasDAL(Data Access Layer)

Esta clase es la que se encargara de acceder a la fuente de datos, aqui se deberan de encontrar las consultas ( si fuera SQL ) en este caso el acceso al fichero XML con todos los datos.

Primero crearemos un método que se llamara “obtenerNodoValor” que nos devolverá el valor de la etiqueta que especifiquemos. Antes hay que agregar las siguientes referencias que utilizaremos.

image

image

Se que les parecera un poco confuso pero tratare de explicarlo mas adelante

Ahora vamos a definir el metodo que nos devolvera una lista de objetos de tipo Persona, este metodo se llamara obtenerPersonas() (son diferentes imagenes, pero todo va seguido)

image

image

image

Primero que nada, podemos observar que este metodo devuelve un ArrayList, y el ArrayList que devuelve es “listaPersonas”, trate de comentarlo, lo único que falta por comentar es dentro del IF. Lo que se hace aquí es ver si el nodo que se obtuvo ( del nodo padre personas) es un nodo que contiene un elemento, o sea si tiene esto <tag>ELEMENTO</tag>, después de esto solo queda hacer ese nodo un Elemento (Clase Element, por eso se hace un cast), se crea un objeto tipo personas en el cual con sus métodos set se establecen valores, pero aquí hacemos uso del método que ya creamos anteriormente “obtenerNodoValor”, le damos la etiqueta y el elemento ( la persona ) y este nos devuelve el valor que se encuentra dentro de las etiquetas <tag> VALOR </tag>

Clase Principal

Ahora solo queda hacer uso de este método en la clase principal, como les comente esto lo haremos sin una interfaz grafica, pero ya con esto ustedes podrán mostrarlo en una JTable o un JList

image

image

Y el resultado sera el siguiente:

image

 

Ahora solo faltara esperar la parte 2 para saber como dar altas de personas en un archivo XML, un saludo y espero les sea de ayuda!.

Anuncios

11 comentarios sobre “Usar un archivo XML como una Base de Datos [Java] Parte 1/2

  1. funciona perfecto, ahora cuando lo quiero pasar a un jtable noo me lo toma y tengo que implementar la clase abstactablemodel que tiene metodos totalmente distintos, hay una solucion intermedia????

    1. Saludos y disculpa la demora!, mira no veo por que has de utilizar la clase AbstractTablemodel, ya que puede usar DefaultTableModel y simplemente agregar un arreglo en un registro, no recuerdo muy bien el metodo , addRow o algo por el estilo, y recibe un arreglo. Es sencillo, con este ejepmlo ya tienes una clase Personas que tiene todos los metodos get necesarios para obtener los valores.

  2. Hola una pregunta como puedo pasar de un fichero XML a una BD, puedes decirme los pasos porfavor , consegui simular lo que habias hecho despus que mas hago para almacenarlo en una BD.

    1. Cual es tu duda en especifico? Cuando ya leiste el archivo XML y lo tienes por decirlo “mapeado” en un listado de objetos, solo falta iterar ese listado y darlo de alta en una BD. Si buscas entre mis tutoriales explico como dar de alta a una BD en MySQL. Saludos!

    1. Si ya tienes la tabla creada en el codigo del frame se crea el sig codigo
      Solo que yo lo hize con guitarras solo seria caso que lo agregaras segun tu clase

      public void Mostrar() {
      DefaultTableModel llenar = (DefaultTableModel) tbGuitarras.getModel();
      Object[] fila = new Object[5];

          for (int i = 0; i < tbGuitarras.getRowCount(); i++) {
              llenar.removeRow(i);
              i -= 1;
          }
          agregarGuitarra objGui = new agregarGuitarra();
          ArrayList<Guitarras> listGuitarras = objGui.obtenerGuitarras();
      
      
      
          for (int i = 0; i < listGuitarras.size(); i++) {
              fila[0] = "" + listGuitarras.get(i).getNombre();
              fila[1] = "" + listGuitarras.get(i).getMarca();
              fila[2] = "" + listGuitarras.get(i).getModelo();
              fila[3] = "" + listGuitarras.get(i).getCosto();
              fila[4] = "" + listGuitarras.get(i).getGarantia();
              llenar.addRow(fila);
          }
      }
      

      Espero Que Te Sirva :3

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