Record.java
package moder; 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; import javax.microedition.rms.RecordStoreException; import javax.microedition.rms.RecordStoreFullException; import javax.microedition.rms.RecordStoreNotFoundException; public class Record { private final static String userdb="userdb",coredb="datacore"; /** * 插入记录 * @param tag 标签 * @param inputdata 输入数据 * @return */ public static boolean insert(String tag,byte[] inputdata){ int corelength=getSize(coredb);//核心数据的总长 //标签格式化 ByteArrayOutputStream baos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(baos); try { dos.writeInt(corelength); dos.writeUTF(tag); dos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] write=baos.toByteArray(); byte[] userrecord=null; if(corelength>0){ userrecord=readData(userdb,1); byte[] create=new byte[userrecord.length+write.length]; System.arraycopy(userrecord, 0, create, 0, userrecord.length); System.arraycopy(write, 0, create, userrecord.length, write.length); userrecord=create; } else userrecord=write; saveData(userdb,1,userrecord); corelength++;//RMS的记录是从1开始 return saveData(coredb,corelength,inputdata); } /** * 更新记录 * @param tag 标签 * @param updatedata 更新数据 * @return */ public static boolean update(String tag,byte[] updatedata){ byte[] userdata=readData(userdb,1); int times=getSize(coredb); ByteArrayInputStream bis=new ByteArrayInputStream(userdata); DataInputStream dis=new DataInputStream(bis); int readid=0; String temp; try { for(int t=0;t<times;t++){ readid=dis.readInt(); temp=dis.readUTF(); if(tag.equals(temp)){ readid++; return saveData(coredb,readid,updatedata); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } /** * 查询记录 * @param tag 标签 * @return 数据 */ public static byte[] select(String tag){ byte[] userdata=readData(userdb,1); if(userdata==null) return null; int times=getSize(coredb); ByteArrayInputStream bis=new ByteArrayInputStream(userdata); DataInputStream dis=new DataInputStream(bis); int readid=0; String temp; try { for(int t=0;t<times;t++){ readid=dis.readInt(); temp=dis.readUTF(); if(tag.equals(temp)){ readid++; return readData(coredb,readid); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 写数据 * @param tag 标签 * @param data 数据 * @return */ public static boolean write(String tag,byte[] data){ if(!exits(tag)) return insert(tag,data); else return update(tag,data); } /** * 删除所有数据 * @return */ public static boolean deleteAllDB(){ try { RecordStore.deleteRecordStore(userdb); RecordStore.deleteRecordStore(coredb); return true; } catch (RecordStoreNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RecordStoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } /** * 判断是否存在记录 * @param tag 标签 * @return */ private static boolean exits(String tag){ byte[] userdata=readData(userdb,1); if(userdata==null) return false; int times=getSize(coredb); ByteArrayInputStream bis=new ByteArrayInputStream(userdata); DataInputStream dis=new DataInputStream(bis); String temp; try { for(int t=0;t<times;t++){ dis.readInt(); temp=dis.readUTF(); if(tag.equals(temp)){ return true; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } private static boolean saveData(String name,int index,byte[] data){ RecordStore rms = null; try { rms = RecordStore.openRecordStore(name, true); if (rms.getNumRecords() >= index) { rms.setRecord(index, data, 0, data.length); } else { rms.addRecord(data, 0, data.length); } rms.closeRecordStore(); rms = null; return true; } catch (Exception e) { if (rms != null) { try { rms.closeRecordStore(); } catch (Exception e1) { e1.printStackTrace(); } rms = null; } e.printStackTrace(); } return false; } private static byte[] readData(String name,int index){ RecordStore rms = null; byte[] data = null; try { rms = RecordStore.openRecordStore(name, true); if (rms.getNumRecords() > 0) { data=rms.getRecord(index); } rms.closeRecordStore(); rms = null; return data; } catch (Exception e) { try { if (rms != null) { rms.closeRecordStore(); rms = null; } } catch (Exception ee) { ee.printStackTrace(); } } return null; } private static int getSize(String name){ RecordStore rms = null; try { rms=RecordStore.openRecordStore(name, true); int size=rms.getNumRecords(); rms.closeRecordStore(); return size; } catch (RecordStoreFullException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RecordStoreNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RecordStoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0; } }
调用方法
void insertData(String tag,String write){ ByteArrayOutputStream baos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(baos); try { dos.writeUTF(write); dos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] writedata=baos.toByteArray(); Record.insert(tag, writedata); System.out.println("写完"); } String selectData(String tag){ byte[] readData=Record.select(tag); ByteArrayInputStream bais=new ByteArrayInputStream(readData); DataInputStream dis=new DataInputStream(bais); String content=null; try { content=dis.readUTF(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(content); return content; } void updateData(String tag,String update){ ByteArrayOutputStream baos=new ByteArrayOutputStream(); DataOutputStream dos=new DataOutputStream(baos); try { dos.writeUTF(update); dos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] writedata=baos.toByteArray(); Record.update(tag, writedata); System.out.println("改完"); }