domingo, 20 de mayo de 2012

J2MEMicroDB

En este tutorial vamos a desarrollar una base de datos en un movil, pero primero debemos conocer sobre J2ME asi que les dejo un link sobre un tutorial de J2ME.

http://mygnet.net/manuales/j2me//tutorial_j2me_el_mejor_que_he_visto.370


Ahora vamos con las herramientas que vamos a emplear, primero necesitamos una plataforma de desarrollo asi que trabajaremos con Netbeans y les dejo el link de descarga.


Después de haber descargado el IDE o plataforma de desarrollo vamos a crear un proyecto, cuando abrimos el Netbeans le damos nuevo proyecto--después buscamos la carpeta que dice Jave ME--le damos click y seleccionamos Mobile Application.

Le damos un nombre al proyecto, en mi caso se llama PrototipoPersona.
Ahora vamos a trabajar con un API que encontré en mi investigación, que hace este API me permite crear una base de datos y de una forma muy sencilla.
Este APi se llama J2MEMicroDB nos permite trabajar con tablas relacionales y sin necesidad de tanto codigo :) les dejo un link de la pagina WikiDataLIB

Y este link es de mi auto ria ya que subí el api en mediafire para descarga de una manera mas sencilla


Ya descargado el api lo primero que debemos hacer es incluirlo en nuestro proyecto, en la parte donde se creo el proyecto ahi tres paquetes el Source Packages el Resurces y ProjectConfigurations, en Resource le damos click derecho y nos tiene que salir la opción Add library.
Lo siguiente es darle en Edit para poder agregar la librería nos tiene que salir lo siguiente.

le dan New Library  ahí le ponen un nombre a la librería y le agrega el classpath, sources y javadoc para agregarlos en el boton de AddJar/Folder. En el link anterior donde esta el api esta el classpath = J2MEMicroDBv10.jar , sources = J2MEMicroDBSource.zip y el javadoc = J2MEMicroDBJavaDoc.zip
le damos ok, ahora buscamos la librería que editamos, en mi caso se llama myLibrary y le damos addLibrary, y listo ahora ya tenemos la librería necesaria para este proyecto.
Ahora vamos a crear una clase Persona con sus atributos, constructores y métodos, queda así la clase.
Los últimos métodos que se generan por la implements de la PDAStoreable no es necesaria así que en mi caso lo deje en blanco, ahora debemos crear una clase que maneje los servicios que se van usar con la persona por ejemplo crear, actualizar y borrar una persona así que en este caso se implementa el método pero no de la misma manera que estar trabajando con la lógica de negocio de un sistema si no que se implementa poniendo columnas y filas ahí se crean las columnas que van a utilizar en la base de datos.

Crear persona Método :

Nueva persona:
Método getPersonas:
método getPersona: 

Método DeletePersona:


Método Actualizar Persona:

Después de estos métodos que nos hacen un CRUD a la base de datos ahora vamos a crear unos métodos propios del API les pongo algunos pero todos son de la misma forma así que :):

Ahora vamos a la clase MIDlet como saben la clase midlet es la parte donde maneja la GUI de los programas que se desarrollan en J2ME asi que sin mas rodeo veamos el codigo.

Estos primeros son los atributos que vamos a manejar, ahí se encuentren Form=formularios los Button= botones y et.
Despues de nombrarlos con ellos crearemos los formularios todo lo que necesite como interfaz grafica de usuario.
Ahora empezemos a trabajar con el primer Form en este Form vamos agregar una tabla donde cada vez que le demos crear persona se muestre en la tabla, y tambien un menu de crear, buscar.
Primer Form MainForm:
















El siguiente Método es la tabla que va registrar las personas.

















toca inicializar la tabla asi que se muestra en lo siguiente:

String[][] initTable(){
        rows = 0;
        Vector personas;
        try {
            personas = listaPersonas.getPersonas();
             if(personas != null){
           int NumeroPersonas = personas.size();
           String [][] data = new String[NumeroPersonas][9];
           for( int i = 0; i < personas.size(); i++){
               J2MERow row = (J2MERow)personas.elementAt(i);
                   String nombre = listaPersonas.getNombre(row);
                   data[rows][cols] = nombre;
                   cols++;
                   String cedula = listaPersonas.getCedula(row);
                   data[rows][cols] = cedula;
                   cols++;
                   String edad = listaPersonas.getEdad(row);
                   data[rows][cols] = edad;
                   cols++;
                   String telefono = listaPersonas.getTelefono(row);
                   data[rows][cols] = telefono;
                   String fechaNacimiento = listaPersonas.getFechaNacimiento(row);
                   data[rows][cols] = fechaNacimiento;
                   cols++;
                   String peso = listaPersonas.getPeso(row);
                   data[rows][cols] = peso;
                   cols++;
                   String ciudad = listaPersonas.getCiudad(row);
                   data[rows][cols] = ciudad;
                   cols++;
                   String provincia = listaPersonas.getProvincia(row);
                   data[rows][cols] = provincia;
                   cols++;
                   String pais = listaPersonas.getPais(row);
                   data[rows][cols] = pais;
                   rows++;
                   cols=0;
             
                }
                return data;
             }
        } catch (J2MEDBException ex) {
            ex.printStackTrace();
        }
         return null;
        }
No me cabía todo en la imagen así que la copie para que ustedes vean como debe quedar.
Lo que sigue son los comandos para salir, buscar, y crear.
























Ahora el diseño de la tabla con sus respectivas columnas y filas :



 public org.netbeans.microedition.lcdui.SimpleTableModel getSimpleTableModel1() {
        if (simpleTableModel1 == null) {                      
            simpleTableModel1 = new org.netbeans.microedition.lcdui.SimpleTableModel();                      
            simpleTableModel1.setValues(new String[][] {
                new String[] {
                    null,null,null,null,null,
                    null,null,null,null,
                },
                new String[] {
                    null,null,null,null,null,
                    null,null,null,null,
                },
                new String[] {
                    null,null,null,null,null,
                    null,null,null,null,
                },
                new String[] {
                   null,null,null,null,null,
                    null,null,null,null,
                },
            });
            simpleTableModel1.setColumnNames(new String[] {
                "Nombre",
                "Cedula",
                "Edad",
                "Telefono",
                "Fecha de nacimiento",
                "Peso",
                "Ciudad",
                "Provincia",
                "Pais",
            });                    
           String[][] data=initTable();
           if (data!=null)
              simpleTableModel1.setValues(data);
        }                      
        return simpleTableModel1;
    }

Y listo tenemos creada el form de inicio, el manejo de form  si quieren agregarles mas cosas es cuestión de ustedes ya que solo mostrare los formularios y como se queda guardado en una base de datos del celular la cuestión de diseño se las dejo a su imaginación.
Siguiendo con lo nuestro vamos al formulario de crear persona.
























Y los botones que se van agregar en el formulario de crear o nueva persona.


  public void clearNuevaPersonaForm() {
     
        if(TextFieldNombre != null)
            TextFieldNombre.setString("");
         if(TextFieldCedula != null)
            TextFieldCedula.setString("");
        if(TextFieldEdad != null)
            TextFieldEdad.setString("");
        if(TextFieldTelefono != null)
            TextFieldTelefono.setString("");
        if(TextFieldFechaNacimiento != null)
            TextFieldFechaNacimiento.setString("");
        if(TextFieldPeso != null)
            TextFieldPeso.setString("");
        if(TextFieldCiudad != null)
            TextFieldCiudad.setString("");
        if(TextFieldProvincia != null)
            TextFieldProvincia.setString("");
        if(TextFieldPais != null)
            TextFieldPais.setString("");
    }


   
    public TextField getTextFieldNombre() {
       if(TextFieldNombre == null){
          TextFieldNombre = new TextField("Nombre", null, 100, TextField.ANY);
       }
     
       return TextFieldNombre;
    }
   
   
    public TextField getTextFieldCedula() {
       if(TextFieldCedula == null){
          TextFieldCedula = new TextField("Cedula", null, 100, TextField.ANY);
       }
     
       return TextFieldCedula;
    }


    public TextField getTextFieldEdad() {
        if(TextFieldEdad == null){
           TextFieldEdad = new TextField("Edad", null, 100, TextField.ANY);
        }
       
        return TextFieldEdad;
    }


    public TextField getTextFieldTelefono() {
        if(TextFieldTelefono == null){
           TextFieldTelefono = new TextField("Telefono", null, 100, TextField.ANY);
        }
       
        return TextFieldTelefono;
    }


    public TextField getTextFieldFechaNacimiento() {
        if(TextFieldFechaNacimiento == null){
           TextFieldFechaNacimiento = new TextField("Fecha de nacimiento", null, 100, TextField.ANY);
        }
       
        return TextFieldFechaNacimiento;
    }


    public TextField getTextFieldPeso() {
        if(TextFieldPeso == null){
           TextFieldPeso = new TextField("Peso", null, 100, TextField.ANY);
        }
       
        return TextFieldPeso;
    }


    public TextField getTextFieldCiudad() {
        if(TextFieldCiudad == null){
           TextFieldCiudad = new TextField("Ciudad", null, 100, TextField.ANY);
        }
       
        return TextFieldCiudad;
    }


    public TextField getTextFieldProvincia() {
        if(TextFieldProvincia == null){
           TextFieldProvincia = new TextField("Provincia", null, 100, TextField.ANY);
        }
       
        return TextFieldProvincia;
    }


    public TextField getTextFieldPais() {
       if(TextFieldPais == null){
          TextFieldPais = new TextField("Pais", null, 100, TextField.ANY);
       }
     
       return TextFieldPais;
    }


    public Command getCancelCommand1() {
       if(cancelCommand1 == null){
          cancelCommand1 = new Command("salir", Command.CANCEL, 1);
       }
     
       return cancelCommand1;
    }


    public Command getAgregar() {
       if(agregar == null){
          agregar = new Command("Agregar","Agregar", Command.OK, 1);
       }
     
       return agregar;
    }

Y siguiendo con lo anterior vamos con los métodos para editar la persona, no les pondré imagen ya no me caben por que son varios métodos:

/**
     * Actualizar persona
     * @return 
     */
    public Form getEditarPersonaForm() {
        if(editarPersonaForm == null){
           editarPersonaForm = new Form(null, new Item[]{
              getStringItemNombre2(),
              getTextFieldCedula2(),
              getTextFieldEdad2(),
              getTextFieldTelefono2(),
              getTextFieldFechaNacimiento2(),
              getTextFieldPeso2(),
              getTextFieldCiudad2(),
              getTextFieldProvincia2(),
              getTextFieldPais2()   
                     
           });
           
           editarPersonaForm.addCommand(getCancelEditar());
           editarPersonaForm.addCommand(getOkEdit());
           editarPersonaForm.setCommandListener(this);
           editarPersonaForm.setTitle(" Actualizar Persona ");
           
        }
        return editarPersonaForm;
    }


    public Command getCancelEditar() {
        if(cancelEditar == null){
           cancelEditar = new Command("Salir","Salir", Command.CANCEL, 1);
        }
        return cancelEditar;
    }

   
    
    public StringItem getStringItemNombre2() {
       if(stringItemNombre2 == null){
          stringItemNombre2 = new StringItem("Nombre", "< Texto >");
       }
       
       return stringItemNombre2;
    }
        
   public TextField getTextFieldCedula2() {
       if(TextFieldCedula2 == null){
          TextFieldCedula2 = new TextField("Cedula", null, 100, TextField.ANY);
       }
       
       return TextFieldCedula2;
    }

    public TextField getTextFieldEdad2() {
        if(TextFieldEdad2 == null){
           TextFieldEdad2 = new TextField("Edad", null, 100, TextField.ANY); 
        }
        
        return TextFieldEdad2;
    }

    public TextField getTextFieldTelefono2() {
        if(TextFieldTelefono2 == null){
           TextFieldTelefono2 = new TextField("Telefono", null, 100, TextField.ANY);
        }
        
        return TextFieldTelefono2;
    }

    public TextField getTextFieldFechaNacimiento2() {
        if(TextFieldFechaNacimiento2 == null){
           TextFieldFechaNacimiento2 = new TextField("Fecha de nacimiento", null, 100, TextField.ANY);
        }
        
        return TextFieldFechaNacimiento2;
    }

    public TextField getTextFieldPeso2() {
        if(TextFieldPeso2 == null){
           TextFieldPeso2 = new TextField("Peso", null, 100, TextField.ANY);
        }
        
        return TextFieldPeso2;
    }

    public TextField getTextFieldCiudad2() {
        if(TextFieldCiudad2 == null){
           TextFieldCiudad2 = new TextField("Ciudad", null, 100, TextField.ANY);
        }
        
        return TextFieldCiudad2;
    }

    public TextField getTextFieldProvincia2() {
        if(TextFieldProvincia2 == null){
           TextFieldProvincia2 = new TextField("Provincia", null, 100, TextField.ANY);
        }
        
        return TextFieldProvincia2;
    }

    public TextField getTextFieldPais2() {
       if(TextFieldPais2 == null){
          TextFieldPais2 = new TextField("Pais", null, 100, TextField.ANY);
       }
       
       return TextFieldPais2;
    }

    public Command getOkEdit() {
        if(okEdit == null){
           okEdit = new Command("Ok", Command.OK, 1);
        }
        
        return okEdit;
    }

Después de haber hecho el de editar vamos a crear el de mostrar y borrar.


    public Form getPersonaDatosForm() {
        if(personaDatosForm == null ){
           personaDatosForm = new Form(null, new Item[]{
               getStringItemNombre(),
               getStringItemCedula(),
               getStringItemEdad(),
               getStringItemTelefono(),
               getStringItemFechaNacimiento(),
               getStringItemPeso(),
               getStringItemCiudad(),
               getStringItemProvincia(),
               getStringItemPais()
           });
           
           personaDatosForm.addCommand(getok());
           personaDatosForm.addCommand(getBorrar());
           personaDatosForm.addCommand(getEditar());
           personaDatosForm.addCommand(getSalirDatosPersonas());
           personaDatosForm.setCommandListener(this);
           personaDatosForm.setTitle(" Datos de la persona ");
        }
        
        return personaDatosForm;
        
    }
  


    public StringItem getStringItemNombre() {
       if(stringItemNombre == null){
          stringItemNombre = new StringItem("persona nombre", "< Texto >");
       }
       
       return stringItemNombre;
    }


    public StringItem getStringItemCedula() {
       if(stringItemCedula == null){
          stringItemCedula = new  StringItem("personas cedula", "< Texto >");
       }
       
       return stringItemCedula;
    }


    public StringItem getStringItemEdad() {
        if(stringItemEdad == null){
           stringItemEdad = new StringItem("personas edad", "< Texto >");
        }
        
        return stringItemEdad;
    }


    public StringItem getStringItemTelefono() {
        if(stringItemTelefono == null){
           stringItemTelefono = new StringItem("Personas telefonos", "< Texto >");
        }
        
        return stringItemTelefono;
    }


      
    public StringItem getStringItemFechaNacimiento() {
        if(stringItemFechaNacimiento == null){
           stringItemFechaNacimiento = new StringItem("Persona fecha de nacimeinto", "< Texto >");
        }
        
        return stringItemFechaNacimiento;
    }


    private StringItem getStringItemPeso() {
        if(stringItemPeso == null){
           stringItemPeso = new StringItem("Persona peso", "< Texto >"); 
        }    
        
        return stringItemPeso;
    }
    
    public StringItem getStringItemCiudad() {
        if(stringItemCiudad == null){
           stringItemCiudad = new StringItem("Persona ciudad", "< texto >");
        }
        
        return stringItemCiudad;
    }


    
    public StringItem getStringItemProvincia() {
        if(stringItemProvincia == null){
           stringItemProvincia = new StringItem("Persona provincia", "< Texto >");
        }
        return stringItemProvincia;
    }


    public StringItem getStringItemPais() {
        if(stringItemPais == null){
           stringItemPais = new StringItem("Personas pais", "< Texto >");
        }
        return stringItemPais;
    }
    
    public Command getEditar() {
       if(editar == null){
          editar = new Command("Editar","Editar", Command.OK, 1);
       }
       
       return editar;
    }


    public Command getok() {
        if(ok == null){
           ok = new Command("ok", "ok", Command.OK, 1);
        }
        
        return ok;
    }
    
      public Command getBorrar() {
        if(borrar == null){
           borrar = new Command("borrar persona","borrar persona", Command.OK, 1);
        }
        
        return borrar;
    }
      
    public Command getSalirDatosPersonas() {
        if(salirDatosPersonas == null){
           salirDatosPersonas = new Command("Salir", "Salir", Command.CANCEL, 1);
        }
        
        return salirDatosPersonas;
    }

Y por ultimo el método que nos va a votar los alertas:


  public void showAlert(String err) {
         Alert a = new Alert("");
        a.setString(err);
        a.setTimeout(Alert.FOREVER);
        a.setType(AlertType.WARNING);
        //Display d=getDisplay();
         getDisplay().setCurrent(a);    
         destroyApp(false);
    }


Si tienen alguna duda o quieren ver el código completo les subiré un link donde esta el proyecto y me pueden preguntar, al final tiene que dar algo por este estilo.


















































Si necesitan algo les dejo mi correo por si necesitan ayuda en algo.

reinaldojaimes@unisangil.edu.co

Cemente su comentario es importante para aprender :D