J2ME保存数据有一些蛋筒,这货不是数据库!
以下是我写的工具类:
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import javax.microedition.rms.RecordStore; /** * 保存数据 * * @author Denger * */ public class RMSHelper { /** * 已经存在该记录 */ public static final int EXISTED = -2; /** * 出错 */ public static final int ERROR = -1; /** * 读取记录成字符串数组 * * @param b * 记录 * @param count * 要转成String的个数 * @return */ public static String[] readRecord2Strings(byte[] b, int count) { String[] result = new String[count]; ByteArrayInputStream bais = new ByteArrayInputStream(b); DataInputStream dis = new DataInputStream(bais); try { for (int i = 0; i < count; i++) { result[i] = dis.readUTF(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { dis.close(); bais.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result; } /** * 把String数组里的内容写成可以存储的字节数组 * * @param ss */ private static byte[] writeStrings2RecordBytes(String[] ss) { ByteArrayOutputStream baos = null; DataOutputStream dos = null; byte[] b = null; try { baos = new ByteArrayOutputStream(); dos = new DataOutputStream(baos); for (int i = 0; i < ss.length; i++) { dos.writeUTF(ss[i]); } b = baos.toByteArray(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { dos.close(); baos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return b; } /** * 把记录保存到RMS * * @param rs * @param ss * @return */ public static int writeStrings2Record(RecordStore rs, String[] ss) { int result = ERROR; byte[] bb = writeStrings2RecordBytes(ss); try { result = rs.addRecord(bb, 0, bb.length); } catch (Exception e) { e.printStackTrace(); } return result; } public static RecordStore openStore(String storeName) { RecordStore rs = null; try { rs = RecordStore.openRecordStore(storeName, true); rs.setMode(RecordStore.AUTHMODE_ANY, true);// 共享模式 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs; } /** * 关闭RMS * * @param rs */ public static void closeStore(RecordStore rs) { if (rs == null) { return; } try { rs.closeRecordStore(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 删除 * * @param storeName */ public static void deleteStore(String storeName) { try { RecordStore.deleteRecordStore(storeName); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
使用保存方法示例:
/** * 保存。先存姓名,再存电话号码 * * @param info * @return */ public int saveHelpPhone(HelpPhone info) { int result = RMSHelper.ERROR; try { rs = RMSHelper.openStore(STORE_NAME); RecordEnumeration em = rs.enumerateRecords(null, null, true); while (em.hasNextElement()) { int recordId = em.nextRecordId(); byte[] b = rs.getRecord(recordId); String[] ss = RMSHelper.readRecord2Strings(b, 1); if (ss[0].equals(info.getUserName())) {// 已经存在 Log.d(TAG, info.getUserName() + " is already exit."); return RMSHelper.EXISTED;// 已经存在了 } } String[] ss = new String[2]; ss[0] = info.getUserName(); ss[1] = info.getPhoneNum(); result = RMSHelper.writeStrings2Record(rs, ss); Log.d(TAG, "addRecord:" + result); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Types2Frame.log = e.getMessage(); } finally { try { rs.closeRecordStore(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result; }
删除记录示例:
public boolean removeHelpPhone(String userName) { try { rs = RMSHelper.openStore(STORE_NAME); RecordEnumeration em = rs.enumerateRecords(null, null, true); while (em.hasNextElement()) { String[] ss; int recordId = em.nextRecordId(); byte[] b = rs.getRecord(recordId); ss = RMSHelper.readRecord2Strings(b, 1); if (ss[0].equals(userName)) { rs.deleteRecord(recordId); return true; } } } catch (Exception e) { e.printStackTrace(); } finally { try { rs.closeRecordStore(); } catch (Exception e) { e.printStackTrace(); } } return false; }