leer contenido registro (RSM)

bizkitgirl
30 de Agosto del 2005
Hola!
Estaba probando el RSM y he guardado algunos datos en algunos registros.
Supuestamente al hacer un getRecord(id) dond id es el identificador del registro, se obtiene el dato q hay guardado en el registro en un array d bytes, es decir, byte[]
Yo queria mostrar por pantalla ese dato por lo q he guardado el contenido en una variable:
byte[] dato = null;
dato = rs.getRecord(id);
/*con su correspondiente try y catch*/

al mostrarlo por pantalla:
System.out.println("contenido registro: " + dato.toString();

no se muestra el contenido tal y como fue guardado sino q se ven numeros y letras.

La funcion .toString() no funciona en este caso? q he de hacer para leer el contenido tal y como lo guarde?

(Gracias)

Snookie
30 de Agosto del 2005
Saludos
Esta clase hace todo lo que necesitás. En vez de usar los ByteArrayOut(In)putStream, usás mi_cadena.getBytes() y new String(<el_arreglo_de_byte_que_te_devuelva>). el último método es de búsqueda, es particular de una aplicación que hice, pero con ciertas modificaciones sirve pa lo que sea. he aquí el code:

package persistencia;

import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.util.Vector;

import javax.microedition.rms.*;

public class RMS {
// Le damos el nombre de la BD, la cual usaremos en esta practica.
private String BD;
private String dato;
private int id, i;
private char b;
private RecordStore rs = null;

/**
* Constructora.
*/
public RMS(String BD) {
this.BD=BD;
}

/**
* Fija la base de datos
* */
public void setBD(String BD){
this.BD=BD;
}


/**
* Permite visualizar un registro, ingresando el RecordStore y la posicion.
*/
public String verRegistro(RecordStore rs, int id) {
try {
// Abrimos el recordStore
rs = RecordStore.openRecordStore(BD, true);
ByteArrayInputStream bais = new ByteArrayInputStream(rs
.getRecord(id));
DataInputStream is = new DataInputStream(bais);
// Leemos el registro
try {
dato = is.readUTF();
rs.closeRecordStore();
} catch (EOFException eofe) {
} catch (IOException ioe) {
}
} catch (RecordStoreException e) {
}
return dato;
}

/**
* Permite almacenar un registro.
*/
public void guardaRegistro(String dato) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream os = new DataOutputStream(baos);
try {
// Guarda el dato
os.writeUTF(dato);
} catch (IOException ioe) {
}
// Extrae el arreglo de Bytes
byte[] b = baos.toByteArray();
// Lo añadimos al recordStore
try {
rs = RecordStore.openRecordStore(BD, true);
rs.addRecord(b, 0, b.length);
rs.closeRecordStore();
} catch (RecordStoreException rse) {
System.out.println("Error Guardando registro");
}
}

/**
* Clarea el registro en su totalidad.
*/
public void ResetRegistro() {
try {
RecordStore.deleteRecordStore(BD);
} catch (Exception e) {
}
}

/**
* Elimina un solo registro.
*/
public void BorrarRegistro(int id) {
try {
rs = RecordStore.openRecordStore(BD, true);
rs.deleteRecord(id);
rs.closeRecordStore();
} catch (RecordStoreException rse) {
}
}

/**
* Visualiza un registro, ingresando el RecordStore y la posicion.
*/
public int numRegistros() {
int num;
try {
rs = RecordStore.openRecordStore(BD, true);
num = rs.getNumRecords();
rs.closeRecordStore();
return num;
} catch (RecordStoreException rse) {
}
return 0;
}

/**
* Busca un registro ingresando el dato y devuelve su posicion en el
* registro.
*/
public int buscarID(String dato) {
try {
int nr = 0;
// Abrimos el recordStore
rs = RecordStore.openRecordStore(this.BD, true);
// Leemos los registros
RecordEnumeration registros = rs
.enumerateRecords(null, null, false);
// Recorremos todos los elementos
while (registros.hasNextElement()) {
nr = registros.nextRecordId();
if (dato.equals(this.verRegistro(rs, nr))) {
return nr;
}
}
rs.closeRecordStore();
} catch (RecordStoreException e) {
System.out.println(e);
}
return -1;
}

/*
* Actualiza un registro
*/
public boolean updateRecord(int index,String nombre,String tel){
dato=nombre+" <"+tel+">";

byte[] b=dato.getBytes();
try {
rs = RecordStore.openRecordStore(BD, true);
rs.setRecord(index, b, 0, b.length);
rs.closeRecordStore();
return true;
} catch (Exception rse) {
return true;
}
}

/*
*Busca una cadena en los registros, si se pasa 1 es por nombre, si 2 por teléfono
*/
public Vector searchRecord(String dato,int tipo){
String reg="";
Vector ret=null;
try {
int nr = 0;
// Abrimos el recordStore
rs = RecordStore.openRecordStore(this.BD, true);
// Leemos los registros
RecordEnumeration registros = rs
.enumerateRecords(null, null, false);
// Recorremos todos los elementos
while (registros.hasNextElement()) {
nr = registros.nextRecordId();
String p=reg=this.verRegistro(rs, nr);
switch(tipo){
case 1://Por mombre
reg=reg.substring(0,reg.indexOf(" "));
break;
case 2://Por teléfono
reg=reg.substring(reg.indexOf(" ")+2,reg.length()-1);
//"Todos" no se hace nada
}
//Vemos si la cadena está en el trozo
if (reg.toLowerCase().indexOf(dato.toLowerCase())>=0){
if(ret==null)
ret=new Vector();
ret.addElement(p);
}
}
rs.closeRecordStore();
return ret;
} catch (RecordStoreException e) {
System.out.println(e);
return null;
}
}
}

bizkitgirl
30 de Agosto del 2005
Vaya, muchas gracias por todo!

Voy a probarlo ahora mismo, a ver si no la lio...

Antamack
30 de Agosto del 2005
No se si como tu lo haces ha de funcionar o no, pero en cualquier cosa puedes probar con ir leyendo byte a byte el array, pasar cada byte q leas a char y meterlo en un array de chars o en un StringBuffer.

bizkitgirl
30 de Agosto del 2005
acabo d intentar hacer eso q m has sugerido xo o lo he hecho mal o no se puede, no se muy bien como hacerlo, si alguien pudiera darme una explicacion, mejor. Gracias