2012-07-23 42 views
3

我是J2ME中的新成員。J2ME中的數據庫

在我的應用程序中,我想添加記錄存儲中的多個記錄,並且還想訪問它。

如何添加記錄存儲中的多個記錄以及如何訪問它?

回答

8

這裏是我的庫代碼爲RMS,只是研究它,它是非常容易實現的,都喜歡插入,更新,刪除的方法是存在的。

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; 
    } 
} 
+0

Lucifer先生,請爲我提供CustomAlert和MyMidlet文件,因此我可以直觀地理解它。 – Karan 2012-07-23 05:08:55

+1

你可以評論那部分,它只能用於顯示Alert :) – Lucifer 2012-07-23 05:09:46

1

RMS是基於記錄的數據存儲機制,因此您可以非常輕鬆地存儲多條記錄,請參閱以下博客以瞭解RMS的工作原理。

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

+0

非常感謝jeet.It幫助了我。但是一個問題仍然出現,當我關閉模擬器時,數據庫也被刪除。是否有解決方案? – Karan 2012-07-23 04:46:42

+0

你使用的是eclipse還是netbeans? – Lucifer 2012-07-23 04:56:00

+0

我正在使用netbeans IDE 7.1.2進行j2me開發。 – Karan 2012-07-23 04:56:56