Database in J2ME

扶醉桌前 提交于 2019-12-18 05:13:16

问题


I am new in J2ME.

In my Application, I want to add the Multiple Records in the Record Store and also want to access it.

How can I add the multiple Records in the Record Store and how can I access it?


回答1:


Here is my library code for RMS, just study it, it is very easy to implement, all the methods like insert,updated, delete is there.

import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotOpenException;
import com.project.gui.components.CustomAlert;
import com.project.gui.midlet.MyMidlet;

public class RMSStore 
{
    private RecordStore rs = null;

    public void openRecordStore(String str)
    {
        try 
        {
            if(rs == null)
            {
                rs = RecordStore.openRecordStore(str, true);
            }
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

    public void closeRecordStore()
    {
        try 
        {
            if(rs!=null)
            {
                rs.closeRecordStore();
            }
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

    public void deleteRecordStore(String storenName) 
    {
        try 
        {
            RecordStore.deleteRecordStore(storenName);
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

    public void deleteRMS(String storenName) 
    {
        int count = 0;

        try
        {
            RecordStore newRS = RecordStore.openRecordStore(storenName, true);
            count = newRS.getNumRecords();
            newRS.closeRecordStore();
        }
        catch ( Exception e ) 
        {
            System.out.println ( "Error while Opening " + e.toString() );
        }

        if ( count > 0 )
        {
            try 
            {
                RecordStore.deleteRecordStore(storenName);
            }
            catch (Exception e) 
            {
                e.printStackTrace();
            }

        }
    }


    public static String[] listAllRecordStore () 
    {
        return RecordStore.listRecordStores();
    }

    public boolean SearchRecord(String Rec)
    {
        String [] data = getRecordData();

        for ( int i = 0 ; i < data.length ; i++ )
        {
            if ( Rec.toString().trim().equals(data[i].toString().trim()) )
            {
                data = null; // System.gc();
                return true;
            }
        }

        data = null; // System.gc();
        return false;
    }

    public boolean SearchRecord(String Rec, int pos )
    {
        String [] data = getRecordData();

        Rec = Rec.substring(0,pos);
        for ( int i = 0 ; i < data.length ; i++ )
        {
            data[i] = data[i].substring(0, pos );
            if ( Rec.toString().trim().equals(data[i].toString().trim()) )
            {
                data = null; // System.gc();
                return true;
            }
        }

        data = null; // System.gc();
        return false;
    }


    public int getCurrentRecordID ( RMSStore rmsTable, String Rec )
    {
        RecordEnumeration re = null; 
        try
        {
            re = rmsTable.getRecordEnumData();

            while ( re.hasNextElement() )
            {
                int id = re.nextRecordId();
                String record = rmsTable.getRecordFromId(id);

                if ( record.indexOf(Rec) != -1 )
                {
                    return id;
                }
            }
        }
        catch ( Exception e ) { System.out.println ( "getCurrentRecordID Error:" + e.toString() );  }
        return -1;
    }

    public int writeRecord(String str)
    {
        int id = 0;
        try 
        {
            id = rs.addRecord(str.getBytes(), 0, str.getBytes().length);
        } 
        catch (RecordStoreFullException e) 
        {
            CustomAlert memoryFullAlert = new CustomAlert("");
            memoryFullAlert.setString("Memory Full");
            MyMidlet.getDisplay().setCurrent(memoryFullAlert);
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return id;
    }

    public int writeByteRecord(byte[] data)
    {
        int id = -1;

        try 
        {
            id = rs.addRecord(data, 0, data.length);
        } 
        catch (RecordStoreFullException e) 
        {
            e.printStackTrace();
            CustomAlert memoryFullAlert = new CustomAlert("");
            memoryFullAlert.setString("Memory Full");
            MyMidlet.getDisplay().setCurrent(memoryFullAlert);          
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return id;
    }

    public int getRecordCount()
    {
        try 
        {
            return rs.getNumRecords();
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return 0;
    }

    public byte[] getRecordDataFromId(int id)
    {
        byte[] data = null;
        try 
        {
            data = rs.getRecord(id);            
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return data;
    }

    public String getRecordFromId(int id)
    { 
        return new String(getRecordDataFromId(id));
    }

    public byte[] getRecordByteFromId(int id)
    { 
        return getRecordDataFromId(id);
    }

    public void deleteRecord(int id)
    {
        try 
        {
            rs.deleteRecord(id);
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

    public boolean checkRecordExists(String compare)
    {
        for(int i = 0; i < getRecordCount(); i++)
        {           
            if(compare.equals(getRecordFromId(i + 1)))
            {
                return true;
            }
        }       
        return false;
    }

    public int getMaxRMSSize()
    {
        int size  = 0;
        try 
        {
            size = rs.getSizeAvailable() + rs.getSize();
        } 
        catch (RecordStoreNotOpenException e) 
        {
            e.printStackTrace();
        }

        return size;
    }

    public void setRecordById(String str, int id)
    {
        try 
        {
            rs.setRecord(id, str.getBytes(), 0, str.getBytes().length);
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }

    public int getNextRecordId() 
    {
        int id = 0;
        try 
        {
            id = rs.getNextRecordID();
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return id;
    }

    public RecordEnumeration getRecordEnumData () 
    {
        try 
        {
            return rs.enumerateRecords(null, null, false);
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
            return null;
        }
    }

    public String [] getRecordData()
    {
        String[] str = null;
        int counter = 0;
        try 
        {
            RecordEnumeration enumeration = rs.enumerateRecords(null, null, false);
            str = new String[rs.getNumRecords()];

            while(enumeration.hasNextElement())
            {
                try 
                {
                    str[counter] = (new String(enumeration.nextRecord()));
                    counter ++;
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }
}



回答2:


RMS is a record based data storage mechanism, so you can store multiple records very easily, see following blog to see how RMS works.

http://www.ibm.com/developerworks/library/wi-rms/



来源:https://stackoverflow.com/questions/11606527/database-in-j2me

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!