Almacenando Varios Datos en un Solo Registro

Almacenando Varios Datos en un solo registro

RMS o Record Management System nos permite crear varios RecordStore, nosotros los llamamos zonas, cada zona puede almacenar varios registros, pero cada registro solo puede contener maximo 32 bytes. Si quisieramos guardar varios datos, como identificacion, nombre, apellido, de la forma tradicional lo hariamos en un registro cada uno, uno para el id, otro para el nombre, y asi sucesivamente.

Hoy les mostrare como podemos almacenar varios datos en un solo registro y ademas pueden ser datos de diferente tipo.

Imagenes

Codigo

Clase Principal

package clases;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class Principal extends MIDlet {

 Display pantalla;
 Forma f;

 public Principal() {
  pantalla = Display.getDisplay(this);
  f = new Forma(this);
 }

 public void startApp() {
  pantalla.setCurrent(f);
 }

 public void pauseApp() {
 }

 public void destroyApp(boolean x) {
 }
}

Clase Forma

package clases;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.lcdui.*;

public class Forma extends Form implements CommandListener {

 Command guardar, leer, salir;
 TextField txtnombre, txtapellido, txtedad;
 Principal midlet;
 Alert alerta;

 public Forma(Principal mid) {
  super("Registro");
  midlet = mid;
  txtnombre = new TextField("Nombre:", "", 40, TextField.ANY);
  txtapellido = new TextField("Apellido:", "", 40, TextField.ANY);
  txtedad = new TextField("Edad:", "", 40, TextField.ANY);
  salir = new Command("Salir", Command.EXIT, 1);
  leer = new Command("Leer", Command.EXIT, 1);
  guardar = new Command("Guardar", Command.EXIT, 2);
  append(txtnombre);
  append(txtapellido);
  append(txtedad);
  addCommand(guardar);
  addCommand(leer);
  addCommand(salir);
  setCommandListener(this);
 }

 public void commandAction(Command c, Displayable d) {
  if (c == salir) {
   midlet.destroyApp(true);
  } else {
   if(c==guardar){
    RMSOperaciones rmso = new RMSOperaciones();
    rmso.abrirZona("ZonaJavaZone");
    try{
     ByteArrayOutputStream baos=new ByteArrayOutputStream();
     DataOutputStream dos=new DataOutputStream(baos);
     dos.writeUTF(txtnombre.getString());
     dos.writeUTF(txtapellido.getString());
     dos.writeInt(Integer.parseInt(txtedad.getString()));
     dos.close();
     rmso.adicionarRegistro(baos);
     rmso.cerrarZona();
    } catch (IOException ie){
     ie.printStackTrace();
    }
    alerta = new Alert("Mensaje", "Se ha guardado exitosamente", null,
      AlertType.CONFIRMATION);
    alerta.setTimeout(1000);
    midlet.pantalla.setCurrent(alerta, this);
    txtnombre.setString("");
    txtapellido.setString("");
    txtedad.setString("");
   }else{
    RMSOperaciones rmso = new RMSOperaciones();
    rmso.abrirZona("ZonaJavaZone");
    String [] a=rmso.listarRegistro(1);
    txtnombre.setString(a[0]);
    txtapellido.setString(a[1]);
    txtedad.setString(a[2]);
   }
  }
 }
}

Clase RMSOperaciones

package clases;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.rms.*;

public class RMSOperaciones {

 RecordStore rs;

 public RMSOperaciones() {
 }

 public boolean abrirZona(String nombreZona) {
  try {
   rs = RecordStore.openRecordStore(nombreZona, true);
   return true;
  } catch (RecordStoreException e) {
   e.toString();
   return false;
  }
 }
 
 public boolean adicionarRegistro(ByteArrayOutputStream baos) {
  byte[] mensaje;
  mensaje=baos.toByteArray();
  try {
   rs.addRecord(mensaje, 0, mensaje.length);
   return true;
  } catch (RecordStoreException e) {
   e.toString();
   return false;
  }
 }

 public boolean adicionarRegistro(String valor) {
  byte[] mensaje;
  mensaje = valor.getBytes();
  try {
   rs.addRecord(mensaje, 0, mensaje.length);
   return true;
  } catch (RecordStoreException e) {
   e.toString();
   return false;
  }
 }
 
 public String listarRegistro() {
    byte[] reg = new byte[100];
    int tam;
    String buffer = "";
    try {
     for (int i = 1; i <= rs.getNumRecords(); i++) {
      tam = rs.getRecordSize(i);
      reg = rs.getRecord(i);
      buffer += "\n" + i + new String(reg, 0, tam);
     }

    } catch (RecordStoreException e) {
     System.out.println("Error de Lectura");
    }
    return buffer;
   }
 
 public String[] listarRegistro(int r) {
    byte[] reg = new byte[100];
    ByteArrayInputStream bais;
    DataInputStream dis;
    String [] datos= new String[3];
    try {
      reg = rs.getRecord(r);
      bais=new ByteArrayInputStream(reg);
      dis=new DataInputStream(bais);
      datos[0]=dis.readUTF();
      datos[1]=dis.readUTF();
      datos[2]=dis.readInt()+"";
     }  catch (RecordStoreException e) {
     System.out.println("Error de Lectura");
    } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
    return datos;
   }

 public boolean cerrarZona() {
  try {
   rs.closeRecordStore();
   return true;
  } catch (RecordStoreException e) {
   e.toString();
   return false;
  }
 }
}

Podrán descargar el proyecto desde aquí o ingresar a Java Zone para mas información y ejemplos.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

Excelente aportación

Tus post siempre tienen contenido útil, la verdad no he tenido tiempo de probar tus aplicaciones J2ME, pero si he probado tus aplicaciones Java Swing y Applets. Y me parecen de buena calidad.

Bien por compartir tus conocimientos.