Java ME, RMS (Record Management System)

____________________________________________________________________

Java ME 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 Java ME 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. Java ME 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ı.

5 Yorum

  • Yazan: okanakyuz, 29 Nisan 2009 @ 6:39 am

    çok tatmin edici bir yazı

  • Yazan: FeRHaD, 29 Nisan 2009 @ 6:43 am

    Teşekkürler.

  • Yazan: Selçuk DaÄŸ, 10 Nisan 2010 @ 5:43 pm

    Çok faydalı bir yazı olmuÅŸ, çok teÅŸekkürler. Nette bu konuyla ilgili Türkçe açıklama yok denecek kadar az ya da ulaÅŸmak çok güç…

  • Yazan: batu, 8 Mayıs 2010 @ 9:12 pm

    bence yeterince tatmin edici bir yazı değil arkadaşım

  • Yazan: FeRHaD, 8 Mayıs 2010 @ 9:18 pm

    @Batu, yorum kısmı da işte bunun için var. 🙂 Eksik gördüğün ne ise onu söyle ya da sor, cevaplamaya çalışırız.

Bu yazıya bağlantılar

Bu yazıdaki yorumlar için RSS beslemesi. Geri izleme URI

Yorum yaz