This example shows how to search a mixed record in RMS.

 /*
J2ME: The Complete Reference

James Keogh

Publisher: McGraw-Hill

ISBN 0072227109

*/
// jad file (Please verify the jar size first)
/*
MIDlet-Name: SearchMixedRecordDataTypeExample
MIDlet-Version: 1.0
MIDlet-Vendor: MyCompany
MIDlet-Jar-URL: SearchMixedRecordDataTypeExample.jar
MIDlet-1: SearchMixedRecordDataTypeExample, , 
             SearchMixedRecordDataTypeExample
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
MIDlet-JAR-SIZE: 100

*/
import javax.microedition.rms.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;

public class SearchMixedRecordDataTypeExample 
     extends MIDlet implements CommandListener
{
  private Display display;
  private Alert alert;
  private Form form; 
  private Command exit; 
  private Command start;
  private RecordStore recordstore = null;
  private RecordEnumeration recordEnumeration = null;
  private Filter filter = null;
  public SearchMixedRecordDataTypeExample ()
  {
    display = Display.getDisplay(this);
    exit = new Command("Exit", Command.SCREEN, 1);
    start = new Command("Start", Command.SCREEN, 1);
    form = new Form("Mixed RecordEnumeration");
    form.addCommand(exit);
    form.addCommand(start);
    form.setCommandListener(this);
  }
  public void startApp()
  {
    display.setCurrent(form);
  }
  public void pauseApp()
  {
  }
  public void destroyApp( boolean unconditional )
  {
  }
  public void commandAction(Command command, Displayable displayable)
  {
    if (command == exit)
    {
      destroyApp(true);
      notifyDestroyed();
    }
    else if (command == start)
    {
      try
      {
        recordstore = RecordStore.openRecordStore(
                  "myRecordStore", true );
      }
      catch (Exception error)
      {
        alert = new Alert("Error Creating", 
                 error.toString(), null, AlertType.WARNING); 
        alert.setTimeout(Alert.FOREVER); 
        display.setCurrent(alert);
      }
      try
      {
        byte[] outputRecord;
        String outputString[] = {"Adam", "Bob", "Mary"};
        int outputInteger[] = {15, 10, 5};
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        DataOutputStream outputDataStream = 
                new DataOutputStream(outputStream);
        for (int x = 0; x < 3; x++)
        {
          outputDataStream.writeUTF(outputString[x]);
          outputDataStream.writeInt(outputInteger[x]); 
          outputDataStream.flush();               
          outputRecord = outputStream.toByteArray();
          recordstore.addRecord(outputRecord, 0, outputRecord.length); 
          outputStream.reset();  
        }
        outputStream.close();
        outputDataStream.close();
      }
      catch ( Exception error)
      {
       alert = new Alert("Error Writing", 
              error.toString(), null, AlertType.WARNING); 
       alert.setTimeout(Alert.FOREVER); 
       display.setCurrent(alert);
      }
      try
      {
       String inputString;
       byte[] byteInputData = new byte[300]; 
       ByteArrayInputStream inputStream = 
                   new ByteArrayInputStream(byteInputData);
       DataInputStream inputDataStream = 
                   new DataInputStream(inputStream);
       if (recordstore.getNumRecords() > 0)
       { 
         filter = new Filter("Mary");
          recordEnumeration = recordstore.enumerateRecords( 
                       filter, null, false);
          while (recordEnumeration.hasNextElement())
          {
            recordstore.getRecord(recordEnumeration.nextRecordId(), 
                            byteInputData, 0);       
            inputString = inputDataStream.readUTF() + 
                           " " + inputDataStream.readInt();
            alert = new Alert("Reading", inputString, 
                      null, AlertType.WARNING); 
            alert.setTimeout(Alert.FOREVER); 
            display.setCurrent(alert); 
          }
       }
       inputStream.close();
      }
      catch (Exception error)
      {
        alert = new Alert("Error Reading", 
                error.toString(), null, AlertType.WARNING); 
        alert.setTimeout(Alert.FOREVER); 
        display.setCurrent(alert);
      }
      try
      {
        recordstore.closeRecordStore();
      }
      catch (Exception error)
      {
        alert = new Alert("Error Closing", 
                 error.toString(), null, AlertType.WARNING); 
        alert.setTimeout(Alert.FOREVER); 
        display.setCurrent(alert);
      }
      if (RecordStore.listRecordStores() != null)
      {
        try
        {
          RecordStore.deleteRecordStore("myRecordStore");
          filter.filterClose();
          recordEnumeration.destroy();
        }
        catch (Exception error)
        {
         alert = new Alert("Error Removing", 
                 error.toString(), null, AlertType.WARNING); 
         alert.setTimeout(Alert.FOREVER); 
         display.setCurrent(alert);
        }
      }
    }
  }     
}
class Filter implements RecordFilter
{
  private String search = null;
  private ByteArrayInputStream inputstream = null;
  private DataInputStream datainputstream = null;
  public Filter(String searchcriteria)
  {
    search = searchcriteria;
  }
  public boolean matches(byte[] suspect)
  {
    String string = null;
    try
    {
      inputstream = new ByteArrayInputStream(suspect);
      datainputstream = new DataInputStream(inputstream);
      string = datainputstream.readUTF();
    }
    catch (Exception error)
    {
      return false;
    }
    if (string!= null && string.indexOf(search) != -1)
      return true;
    else
      return false;
  }
  public void filterClose()
  {
   try
   {
     if (inputstream != null)
     {
       inputstream.close();
     }
     if (datainputstream != null)
     {
       datainputstream.close();
     }
   }
   catch (Exception error)
   {
   }
  }
}

 

 

 

 Related Tips