Java ME, RMS (Record Management System)

____________________________________________________________________

uygulamalarında bir oyunda yüksek skorlar, uygulamada son yapılan işlem veya daha başka bilgilerin uygulama kapatıldıktan sonra da saklanması ve sonraki açılışta kullanılabilir olması istenebilir. Bunu sağlamak için platformunda RMS (Record Management System – Kayıt Yönetim Sistemi) kullanılır. Bu sistem Java yazılımına bütünleşik bir veri tabanı yönetim sistemi gibidir. Kayıtlarınızı bir veri tabanı gibi kaydedebilir, okuyabilir ve değiştirebilirsiniz. platformuna dahil bir sınıf olduğu için de JSR 75 gibi birçok izinler gerektiren dosya erişim arayüzleri gerekmez.

RMS sisteminde kayıtlar kayıt indeksini belirten bir int ve verinin bulunduğu bir byte değeri şeklindedir. Yani her farklı kaydın bir int değeri olur ve veri byte olarak saklanır. Kayıtlar platform bağımlı konumlarda kullanıcının normal şartlarda erişemeyeceği dosyalarda tutulur. RMS sistemine bir veri tabanı yönetim sistemi de diyebiliriz.

Bir RecordStore
KayıtID intVeri byte[]
1abc
2def

RMS için javax.microedition.rms.RecordStore sınıfı kullanılır. RecordStoreException buradaki tüm istisnalar için süper sınıftır.

RecordStore oluşturmak ve açmak:

Bir RecordStore açmak veya yeni bir RecordStore oluşturmak için RecordStore.openRecordstore(String kayıt_ismi, boolean true/false) yöntemi kullanılır. RecordStore ismi 32 karaktere kadar bir Unicode değeri olabilir. Boolean kısmı da yeni RecordStore oluşturma ile ilgilidir. Eğer true ise belirtilen isimde bir RecordStore olmaması durumunda yeni bir RecordStore oluşturulacak, false ise RecordStore oluşturulmayacak ve RecordStoreNotFoundException istisnası oluşacaktır. Ayrıca eğer kayıt sistemi dolu, yeterli hafıza yok ve yeni RecordStore oluşturulamıyorsa RecordStoreFullException istisnası oluşur.

Örnek:

try{
RecordStore rs = RecordStore.openRecordStore("Kayıt", true );
}
catch (RecordStoreException ex){birseylerYap();}

Uygulamanız MIDP 2.0 ise isterseniz uygulamanızda paylaşık bir RecordStore oluşturabilirsiniz, böylece diğer uygulamalar ya da sizin yazdığınız diğer uygulamalar buraya erişebilir.

Tüm uygulamalara açık bir RecordStore oluşturmak için açma kodu şöyle olmalı:

int authMode = RecordStore.AUTHMODE_ANY;
boolean yazilabilir = true;
rs = RecordStore.openRecordStore( "Kayıt", true, authMode, yazilabilir );

RecordStore.AUTHMODE_ANY olunca RecordStore tüm MIDlet süitleri tarafından açılabilir. AUTHMODE_PRIVATE olarak da kullanılabilir ama bunun sonucu önceki kullanımla aynı olacaktır, yani sadece kendi MIDlet süitimiz bu alana erişebilecek.

Tüm değil de sadece belirli bir MIDlet süit tarafından ulaşılmasını istiyorsak kodumuzu şu şekilde yazabiliriz:

rs = RecordStore.openRecordStore("Kayıt", String uretici, String suit);

Diğer uygulamamız da bunu şöyle açabilir:

String isim = "Kayıt";
String uretici = "f-blog.info";
String suit = "XXXUygulaması";
RecordStore rs = RecordStore.openRecordStore( isim, uretici, suit );

Uygulama ismi yani MIDlet süitinin ismi ve üretici değerleri kaydı oluşturan uygulamanın değerleri ile aynı olmak zorundadır.

RecordStore kapamak:

İşi biten bir kaydı kapamak gereklidir, bunun için de RecordStore.closeRecordStore(String rs_ismi) yöntemi kullanılır. Eğer kayıt kapalı ise RecordStoreNotOpenException istisnası oluşur.

try{
rs.closeRecordStore();
}
catch (RecordStoreException ex){ ... }

RecordStore sıralanması:

RecordStore sıralamak için public String[] listRecordStores() metodu kullanılır. Örnek:
String[] rsler = RecordStore.listRecordStores();

RecordStore silme:

RecordStore silme işlemi RecordStore.deleteRecordStore(String “kayit”) ile yapılır. Silinecek RecordStore kapalı olmalıdır.


if (RecordStore.listRecordStores() != null){//İstisnaya karşı kayıt olup olmadığı kontrol edilir
try{RecordStore.deleteRecordStore("Kayıt");}
catch (Exception ex){ ... }
}

RecordStore içine veri girme :

RecordStore içine veri girmek için şu metot kullanılabilir:
public int addRecord(byte[] veri, 0, int byteSayısı)
Bu metotla kayda bir byte verisi girilir. Oluşabilecek istisnalar; RecordStoreNotOpenException, RecordStoreException,
RecordStoreFullException, (MIDP 2.0) SecurityException
.

String yazi = "veri...";
byte[] veri = yazi.toByteArray();
rs.addRecord( veri, 0, veri.length );}

Veri okuma:

Veri okuma RecordStore.getRecord(int kayitID) ile yapılır. Ör:

int kayitID = 1;
byte[] veri = kayit.getRecord( kayitID );

Veri güncelleme:

Veri güncelleme RecordStore.setRecord(int KayitID, byte veri, 0, int baytSayisi) ile yapılır. KayitID değeri kaydın kayıt alanı içindeki sırası veya indeksidir.

String yazi = "veri xxx...";
byte[] veri = yazi.toByteArray();
int kayitID = 0;
rs.setRecord(kayitID,veri, 0, veri.length );

İstisnalar:

RecordStore işlemlerinde RecordStoreException süper sınıfının altında aşağıdaki istisnalar oluşabilir:
InvalidRecordIDException – RecordStore içindeki kayıtların ID değerlerinde hata vardır. Olmayan bir kayıt için ID belirtilmiştir.
RecordStoreFullException – RecordStore hafıza yetersizliği ya da sistemde öntanımlı kayıt sayısına ulaşlmış olduğu için yeni kayıt oluşturulamaz.
RecordStoreNotFoundException – Belirtilen isimde bir RecordStore yok.
RecordStoreNotOpenException – RecordStore kapalı.