废话不说了,直接列代码。虽然不是很完整,给大家参考一下吧。
package JavaME.rms;
import java.io.File;
import JavaME.midlet.MIDlet;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
public class RecordStore
{
private static final String DATA_NAME = "rms.db";
private static final String ID = "id";
private static final String VALUE = "value";
private static final String TABLE = "rms";
private static final String TABLE_NAME = "name";
public static final int AUTHMODE_ANY = 0;
public static final int AUTHMODE_PRIVATE = 1;
private static String s_sDataPath = null;
private String m_sRmsName = null;
private SQLiteDatabase m_oData = null;
private RecordStore(String sName,boolean bCreate)throws Exception
{
if(sName != null && sName.length() > 0)
{
createDir();
m_oData = SQLiteDatabase .openOrCreateDatabase(s_sDataPath + "/" + DATA_NAME, null);
m_sRmsName = sName;
try
{
m_oData.rawQuery("SELECT * FROM " + TABLE, null);
}
catch(Exception e)
{
m_oData.execSQL("CREATE TABLE " + TABLE + " (" + TABLE_NAME + " TEXT)");
}
//检查是否已经存在该表
try
{
m_oData.rawQuery("SELECT * FROM " + m_sRmsName, null);
}
catch(Exception e)
{
if(bCreate)
{
m_oData.execSQL("CREATE TABLE " + m_sRmsName +" (" + ID + " INTEGER PRIMARY KEY," + VALUE +" COLLATE BINARY)");
m_oData.execSQL("INSERT INTO " + TABLE + "(" + TABLE_NAME + ") VALUES('" + m_sRmsName + "')");
}
else
{
throw new RecordStoreNotFoundException();
}
}
}
else
{
throw new RecordStoreException();
}
}
public static void init(MIDlet oMidLet)
{
s_sDataPath = oMidLet.getFilesDir().getPath();
}
public static RecordStore openRecordStore(String sName,boolean bCreate)throws Exception
{
RecordStore oRecord = new RecordStore(sName,bCreate);
return oRecord;
}
public static RecordStore openRecordStore(String sName,boolean bCreate,int wAnthomde,boolean writable)
{
return null;
}
public static RecordStore openRecordStore(String sName,String sVendorName,String sSuiteName)
{
return null;
}
public static void deleteRecordStore(String sRecordStore)throws Exception
{
SQLiteDatabase oData = null;
createDir();
try
{
oData = SQLiteDatabase.openOrCreateDatabase(s_sDataPath + "/" + DATA_NAME, null);
oData.execSQL("DROP TABLE " + sRecordStore);
oData.execSQL("DELETE FROM " + TABLE + " WHERE " + TABLE_NAME + "='" + sRecordStore + "'");
}
catch(Exception e)
{
throw new RecordStoreNotFoundException();
}
finally
{
if(oData != null)
{
oData.close();
}
}
}
public int addRecord(byte[] bzData, int wOffset, int wNumBytes)throws Exception
{
int wId = -1;
if(m_oData != null)
{
if(wOffset >= 0 && wNumBytes > 0)
{
byte[] bzMid = null;
if(wOffset == 0 && wNumBytes == bzData.length)
{
bzMid = bzData;
}
else
{
bzMid = new byte[wNumBytes];
for(int i = 0;i < wNumBytes;++i)
{
bzMid[i] = bzData[wOffset + i];
}
}
ContentValues oValues = new ContentValues();
oValues.put(VALUE, bzMid);
try
{
//写入新数据
m_oData.insert(m_sRmsName, null, oValues);
//获取最后记录的id
Cursor oCursor = m_oData.rawQuery("SELECT * FROM " + m_sRmsName, null);
oCursor.moveToLast();
wId = oCursor.getInt(oCursor.getColumnIndex(ID));
}
catch(Exception e)
{
throw new RecordStoreException();
}
}
}
else
{
throw new RecordStoreNotOpenException();
}
return wId;
}
public void setRecord(int wRecordId,byte[] bzData,int wOffset,int wNumBytes)throws Exception
{
if(m_oData != null)
{
if(bzData != null && wOffset >= 0 && wNumBytes > 0)
{
ContentValues oValues = new ContentValues();
oValues.put(VALUE, bzData);
m_oData.update(m_sRmsName, oValues, "" + ID + "=" + wRecordId, null);
}
}
else
{
throw new RecordStoreNotOpenException();
}
}
public void closeRecordStore()
{
if(m_oData != null)
{
m_oData.close();
m_oData = null;
}
}
public void deleteRecord(int wRecordId)throws Exception
{
if(m_oData != null)
{
try
{
m_oData.execSQL("DELETE FROM " + m_sRmsName + " WHERE " + ID + "=" + wRecordId);
}
catch(Exception e)
{
throw new RecordStoreException();
}
}
else
{
throw new RecordStoreNotOpenException();
}
}
public int getNextRecordID()throws Exception
{
if(m_oData != null)
{
try
{
Cursor oCursor = m_oData.rawQuery("SELECT * FROM " + m_sRmsName, null);
if(oCursor.moveToLast())
{
return oCursor.getInt(oCursor.getColumnIndex(ID) + 1);
}
else
{
return 1;
}
}
catch(Exception e)
{
throw new RecordStoreException();
}
}
else
{
throw new RecordStoreNotOpenException();
}
}
public int getNumRecords()throws Exception
{
if(m_oData != null)
{
try
{
Cursor oCursor = m_oData.rawQuery("SELECT * FROM " + m_sRmsName, null);
return oCursor.getCount();
}
catch(Exception e)
{
throw new RecordStoreException();
}
}
else
{
throw new RecordStoreNotOpenException();
}
}
public byte[] getRecord(int wRecordId)throws Exception
{
byte[] bzBuf = null;
if(m_oData != null)
{
if(wRecordId > 0)
{
try
{
Cursor oCursor = m_oData.rawQuery("SELECT * FROM " + m_sRmsName + " WHERE " + ID + "=" + wRecordId, null);
if(oCursor.moveToFirst())
{
bzBuf = oCursor.getBlob(oCursor.getColumnIndex(VALUE));
}
}
catch(Exception e)
{
throw new RecordStoreException();
}
}
else
{
throw new InvalidRecordIDException();
}
}
else
{
throw new RecordStoreNotOpenException();
}
return bzBuf;
}
public int getRecord(int wRecordId,byte[] bzBuf,int wOffset)throws Exception
{
if(bzBuf != null)
{
if(wOffset >= 0)
{
byte[] bzMid = getRecord(wRecordId);
int wCount = bzBuf.length;
if(wCount > bzMid.length - wOffset)
{
wCount = bzMid.length - wOffset;
}
for(int i = 0;i < wCount; ++i)
{
bzBuf[i] = bzMid[wOffset + i];
}
}
else
{
throw new ArrayIndexOutOfBoundsException();
}
}
else
{
throw new RecordStoreNotOpenException();
}
return 0;
}
public int getRecordSize(int wRecordId)throws Exception
{
byte[] bzBuf = getRecord(wRecordId);
if(bzBuf != null)
{
return bzBuf.length;
}
else
{
return 0;
}
}
public long getSize()throws Exception
{
if(m_oData != null)
{
File oFile = new File(s_sDataPath + "/" + DATA_NAME);
return oFile.length();
}
else
{
throw new RecordStoreNotOpenException();
}
}
public long getSizeAvailable()throws Exception
{
if(m_oData != null)
{
return m_oData.getMaximumSize();
}
else
{
throw new RecordStoreNotOpenException();
}
}
public int getVersion()
{
if(m_oData != null)
{
return m_oData.getVersion();
}
return -1;
}
public String getName()
{
return m_sRmsName;
}
private static void createDir()
{
File oDir = new File(s_sDataPath);
if(!oDir.exists())
{
oDir.mkdir();
}
}
public static String[] listRecordStores()throws Exception
{
SQLiteDatabase oData = null;
createDir();
String[] szBuf = null;
try
{
oData = SQLiteDatabase.openOrCreateDatabase(s_sDataPath + "/" + DATA_NAME, null);
Cursor oCursor = oData.rawQuery("SELECT * FROM " + TABLE, null);
if(oCursor.getCount() > 0)
{
szBuf = new String[oCursor.getCount()];
int i = 0;
if(oCursor.moveToFirst())
{
do
{
szBuf[i++] = oCursor.getString(oCursor.getColumnIndex(TABLE_NAME));
}while(oCursor.moveToNext());
}
}
}
catch(Exception e)
{
throw e;
}
finally
{
if(oData != null)
{
oData.close();
}
}
return szBuf;
}
}