您的位置:首页 > 其它

J2me RMS存储大容量数据 源码

2009-05-28 20:23 489 查看
RMS类:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package com.sinovoice.rms;

import com.sinovoice.tools.CommandHelper;

import javax.microedition.rms.InvalidRecordIDException;

import javax.microedition.rms.RecordComparator;

import javax.microedition.rms.RecordEnumeration;

import javax.microedition.rms.RecordStore;

import javax.microedition.rms.RecordStoreException;

import javax.microedition.rms.RecordStoreFullException;

import javax.microedition.rms.RecordStoreNotFoundException;

import javax.microedition.rms.RecordStoreNotOpenException;

/**

*

* @author liuqinan

*/

public class RMS implements RecordComparator {

public static final byte DB_RESULT_NO_ERROR = 0x00;

public static final byte DB_RESULT_NOT_FOUND = 0x01;

public static final byte DB_RESULT_NOT_OPEN = 0x02;

public static final byte DB_RESULT_FULL = 0x03;

public static final byte DB_RESULT_INVALID_ID = 0x05;

public static final byte DB_RESULT_SECURITY = 0x06;

public static final byte DB_RESULT_EXCEPTION = 0x07;

private String m_sRMSName = "";

private byte m_bException = 0;

public RMS(String sPath){

m_sRMSName = sPath;

}

/**

* 保存数据

* @param data

* @return

*/

public byte addRecord(byte[] data){

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore(m_sRMSName, true);

rs.addRecord(data, 0, data.length);

} catch (RecordStoreFullException ex) {

m_bException = DB_RESULT_FULL;

ex.printStackTrace();

} catch (RecordStoreNotFoundException ex) {

m_bException = DB_RESULT_NOT_FOUND;

ex.printStackTrace();

} catch (RecordStoreException ex) {

m_bException = DB_RESULT_EXCEPTION;

ex.printStackTrace();

} finally {

try {

rs.closeRecordStore();

} catch (RecordStoreNotOpenException ex) {

ex.printStackTrace();

} catch (RecordStoreException ex) {

ex.printStackTrace();

}

return m_bException;

}

}

/**

* 保存数据

* @param data

* @return

*/

public byte addRecord(byte[][] data){

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore(m_sRMSName, true);

for (int i = 0; i < data.length ; i ++){

rs.addRecord(data[i], 0, data[i].length);

}

} catch (RecordStoreFullException ex) {

m_bException = DB_RESULT_FULL;

ex.printStackTrace();

} catch (RecordStoreNotFoundException ex) {

m_bException = DB_RESULT_NOT_FOUND;

ex.printStackTrace();

} catch (RecordStoreException ex) {

m_bException = DB_RESULT_EXCEPTION;

ex.printStackTrace();

} finally {

try {

rs.closeRecordStore();

} catch (RecordStoreNotOpenException ex) {

ex.printStackTrace();

} catch (RecordStoreException ex) {

ex.printStackTrace();

}

return m_bException;

}

}

/**

* 更新�?��数据

*/

public byte updateRecord(int id, byte[] data){

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore(m_sRMSName, true);

rs.setRecord(id, data, 0, data.length);

} catch (RecordStoreFullException ex) {

m_bException = DB_RESULT_FULL;

ex.printStackTrace();

} catch (RecordStoreNotFoundException ex) {

m_bException = DB_RESULT_NOT_FOUND;

ex.printStackTrace();

} catch (RecordStoreException ex) {

m_bException = DB_RESULT_EXCEPTION;

ex.printStackTrace();

} finally {

try {

rs.closeRecordStore();

} catch (RecordStoreNotOpenException ex) {

ex.printStackTrace();

} catch (RecordStoreException ex) {

ex.printStackTrace();

}

return m_bException;

}

}

/**

* 删除�?��数据记录

*/

public byte deleteRecord(int id){

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore(m_sRMSName, true);

rs.deleteRecord(id);

} catch (InvalidRecordIDException ex){

m_bException = DB_RESULT_INVALID_ID;

ex.printStackTrace();

} catch (RecordStoreFullException ex) {

m_bException = DB_RESULT_FULL;

ex.printStackTrace();

} catch (RecordStoreNotFoundException ex) {

m_bException = DB_RESULT_NOT_FOUND;

ex.printStackTrace();

} catch (RecordStoreException ex) {

m_bException = DB_RESULT_EXCEPTION;

ex.printStackTrace();

} finally {

try {

rs.closeRecordStore();

} catch (RecordStoreNotOpenException ex) {

ex.printStackTrace();

} catch (RecordStoreException ex) {

ex.printStackTrace();

}

return m_bException;

}

}

/**

* 删除�?���?

* @return

*/

public byte removeStore(){

RecordStore rs = null;

try {

RecordStore.deleteRecordStore(m_sRMSName);

} catch (RecordStoreFullException ex) {

m_bException = DB_RESULT_FULL;

ex.printStackTrace();

} catch (RecordStoreNotFoundException ex) {

m_bException = DB_RESULT_NOT_FOUND;

ex.printStackTrace();

} catch (RecordStoreException ex) {

m_bException = DB_RESULT_EXCEPTION;

ex.printStackTrace();

} finally {

return m_bException;

}

}

/**

* 得到�?��记录的数�?

*/

public byte[] getData(int index){

byte[] data = null;

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore(m_sRMSName, true);

data = rs.getRecord(index);

rs.closeRecordStore();

} catch (InvalidRecordIDException ex) {

ex.printStackTrace();

m_bException = DB_RESULT_INVALID_ID;

} catch (RecordStoreNotOpenException ex) {

ex.printStackTrace();

m_bException = DB_RESULT_NOT_OPEN;

} catch (RecordStoreNotFoundException ex) {

ex.printStackTrace();

m_bException = DB_RESULT_NOT_FOUND;

} catch (RecordStoreException ex) {

ex.printStackTrace();

m_bException = DB_RESULT_EXCEPTION;

} finally {

return data;

}

}

/**

* 得到�?��的数据记�?

* @return

*/

public byte[][] getAllData(){

byte[][] data = null;

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore(m_sRMSName, true);

int total = rs.getNumRecords();

data = new byte[total][];

RecordEnumeration enumeration = rs.enumerateRecords(null, this, true);

for (int i = 0; i < total; i ++){

data[i] = rs.getRecord(enumeration.nextRecordId());

}

rs.closeRecordStore();

} catch (InvalidRecordIDException ex) {

ex.printStackTrace();

m_bException = DB_RESULT_INVALID_ID;

} catch (RecordStoreNotOpenException ex) {

ex.printStackTrace();

m_bException = DB_RESULT_NOT_OPEN;

} catch (RecordStoreNotFoundException ex) {

ex.printStackTrace();

m_bException = DB_RESULT_NOT_FOUND;

} catch (RecordStoreException ex) {

ex.printStackTrace();

m_bException = DB_RESULT_EXCEPTION;

} finally {

return data;

}

}

/**

* 比较

* @param arg0

* @param arg1

* @return

*/

public int compare(byte[] arg0, byte[] arg1) {

int num1 = this.readRecord(arg0);

int num2 = this.readRecord(arg1);

int type = 0;

if (num1 > num2) {

type = FOLLOWS;

} else if (num1 < num2) {

type = PRECEDES;

} else {

type = EQUIVALENT;

}

return type;

}

/**

* 读取ID�?

* @param data

* @return

*/

private int readRecord(byte[] data) {

int id = 0;

CommandHelper cmd = new CommandHelper((data));

id = cmd.getInt(2);

return id;

}

/**

* rms的异�?

* @return

*/

public byte getRMSException(){

return m_bException;

}

/**

* 得到要存储的下一条记录rid

*/

public int getNextID(){

int rid = 0;

RecordStore rs = null;

try {

rs = RecordStore.openRecordStore(m_sRMSName, true);

rid = rs.getNextRecordID();

} catch (RecordStoreFullException ex) {

m_bException = DB_RESULT_FULL;

ex.printStackTrace();

} catch (RecordStoreNotFoundException ex) {

m_bException = DB_RESULT_NOT_FOUND;

ex.printStackTrace();

} catch (RecordStoreException ex) {

m_bException = DB_RESULT_EXCEPTION;

ex.printStackTrace();

} finally {

try {

rs.closeRecordStore();

} catch (RecordStoreNotOpenException ex) {

ex.printStackTrace();

} catch (RecordStoreException ex) {

ex.printStackTrace();

}

if (rid <= 0){

rid = 1;

}

return rid;

}

}

public int getTotal() {

int number = 0;

try {

RecordStore rs = RecordStore.openRecordStore(m_sRMSName, true);

number = rs.getNumRecords();

rs.closeRecordStore();

} catch (RecordStoreFullException ex) {

ex.printStackTrace();

} catch (RecordStoreNotFoundException ex) {

ex.printStackTrace();

} catch (RecordStoreException ex) {

ex.printStackTrace();

}

return number;

}

}

DataMgr类:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.sinovoice.rms;
import java.util.Vector;
/**
*
* @author liuqinan
*/
public class DataMgr {

private String m_sPath;

public byte m_nException;

public DataMgr(String sPath){
m_sPath = sPath;
}

public boolean addRecord(Data data){
if (data == null){
return false;
}
RMS rms = new RMS(m_sPath);
m_nException = rms.addRecord(data.toByteArray());
if (m_nException == RMS.DB_RESULT_NO_ERROR){
return true;
}
return false;
}

public boolean updateRecord(Data data){
if (data == null){
return false;
}
RMS rms = new RMS(m_sPath);
m_nException = rms.updateRecord(data.getRMSID(), data.toByteArray());
if (m_nException == RMS.DB_RESULT_NO_ERROR){
return true;
}
return false;
}

public int getTotalCnt(){
RMS rms = new RMS(m_sPath);
return rms.getTotal();
}

public byte[][] getAllData(){
RMS rms = new RMS(m_sPath);
return rms.getAllData();
}

public byte[] getData(int nIndex){
RMS rms = new RMS(m_sPath);
byte[] nData = rms.getData(nIndex);
m_nException = rms.getRMSException();
if (m_nException == RMS.DB_RESULT_NO_ERROR){
return nData;
}
return null;
}

public boolean delData(int nIndex){
RMS rms = new RMS(m_sPath);
m_nException = rms.deleteRecord(nIndex);
if (m_nException == RMS.DB_RESULT_NO_ERROR){
return true;
}
return false;
}

public boolean delAllData(){
RMS rms = new RMS(m_sPath);
m_nException = rms.removeStore();
if (m_nException == RMS.DB_RESULT_NO_ERROR){
return true;
}
return false;
}

public int getNextID(){
RMS rms = new RMS(m_sPath);
return rms.getNextID();
}
}

Data类:

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.sinovoice.rms;
/**
*
* @author liuqinan
*/
public abstract class Data {
protected int m_nRMSID;
public abstract void setData(byte[] nData);
public abstract byte[] toByteArray();

public int getRMSID(){
return m_nRMSID;
}

public void setRMSID(int nID){
m_nRMSID = nID;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: