leer contenido registro (RSM)
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)
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)
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;
}
}
}
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;
}
}
}
Vaya, muchas gracias por todo!
Voy a probarlo ahora mismo, a ver si no la lio...
Voy a probarlo ahora mismo, a ver si no la lio...
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.
