L P TRÌNH J2ME CHO THI T B DI ĐNG
L P TRÌNH J2ME CHO THI T B DI ĐNG
PH N 4
PH N 4
Bãi rác c a anh ^_^
2
5. Record Management System (RMS)
5. Record Management System (RMS)
MIDP không s d ng h th ng file đ l u tr d li u. Thay vào đó MIDP l u toàn b thông ư ư
tin vào non-volatile memory (dung l ng vùng nh ) b ng h th ng l u tr g i là Record ượ ư
Management System (RMS).
RMS là h th ng đc t ch c và qu n lý d i d ng các record (b n ghi). M i b n ghi có ượ ướ
th ch a b t k lo i d li u nào:ki u s nguyên, chu i ký t , m t nh và k t qu c a m t ế
Record là m t chu i (m ng) các byte. N u b n mã hoá d li u c a b n d i d ng nh phân ế ướ
(binary), b n có th l u tr d li u b ng Record sau đó đc d li u t Record và khôi ph c ư
l i d li u ban đu. Kích th c d li u không đc vu t quá gi i h n qui đnh c a thi t b ướ ượ ế
di đng. RMS l u d li u g n nh m t c s d li u, bao g m nhi u dòng, m i dòng l i ư ư ơ
có m t s đnh danh duy nh t.
M t t p các b n ghi(RecordStore) là t p h p các Record đc s p x p có th t . M i ượ ế
Record không th đng đc l p mà nó ph i thu c vào m t RecordStore nào đó, các thao tác
trên Record ph i thông qua RecordStore ch a nó. Khi t o ra m t Record trong RecordStore,
Record đc gán m t s đnh danh ki u s nguyên g i là Record ID. Record đu tiên đc ượ ượ
t o ra s đc gán Record ID là 1,s tăng thêm 1 cho các Record ti p theo. Record ID không ượ ế
là ch m c (index), các thao tác xóa Record trong RecordStore s không tính toán l i các
Record ID c a các Record hi n có cũng không thay đi Record ID c a các Record đc t o ượ
m i, ví d : xóa record id 3, thêm m t record m i s có id là 4. Data là m t dãy các byte đi
di n cho d li u c n l u. ư
Tên đc dung đ phân bi t các RecordStore trong b các MIDlet (MIDlet suite). MIDlet ượ
suite là t p các MIDlet có chung không gian tên (name space), chia s cùng tài nguyên (nh ư
RecordStore), các bi n tĩnh (static variable) trong các l p và các MIDlet này s đc đóng ế ượ
gói trong cùng m t file khi tri n khai. N u ng d ng c a b n ch có m t MIDlet thì các ế
RecordStore đc s d ng cũng phân bi t l n nhau b ng các tên. Tên c a RecordStore có ượ
th dài đn 32 ký t Unicode và là duy nh t trong m t MIDlet suite. ế
3
Các v n đ liên quan đn RMS ế
Các v n đ liên quan đn RMS ế
H n ch v kh năng l u tr c a thi t b di đng : ế ư ế Dung l ng vùng nh ượ
(non-volatile memory) dành riêng cho vi c l u tr d li u trong RMS thay đi tùy ư
theo thi t b di đng. Đc t MIDP yêu c u r ng các nhà s n xu t thi t b di đng ế ế
ph i dành ra vùng nh có kích th c ít nh t 8K cho vi c l u tr d li u trong ướ ư
RMS. Đc t không nêu gi i h n trên cho m i Record. RMS cung c p các API đ
xác đnh kích th c c a m i Record, t ng dung l ng c a RecordStore và kích ướ ượ
th c còn l i c a vùng nh này. Do đó trong quá trình phát tri n các ng d ng ướ
J2ME b n ph i cân nh c trong vi c s d ng vùng nh này.
T c đ truy xu t d li u : Các thao tác trên vùng nh này s ch m h n nhi u khi ơ
truy xu t d li u trên b nh RAM. Gi ng nh t c đ đc c ng và t c đ đc ư
t RAM c a máy tính. Trong k thu t l p trình ph i th ng xuyên cache d li u ườ
và các thao tác liên quan đn RMS ch th c hi n t p trung m t l n (lúc kh i đng ế
hay đóng ng d ng) .
C ch lu ng an toàn :ơ ế N u RecordStore ch đc s d ng b i m t MIDlet, ế ượ
không ph i lo l ng vì RMS s dành riêng m t Thread đ th c hi n các thao tác
trên RecordStore. Tuy nhiên n u có nhi u MIDlet và Thread cùng chia s m t ế
RecordStore thì ph i chú ý đn k thu t l p trình Thread đ đm b o không có s ế
xung đt d li u
4
Các hàm API trong RMS (1)
Các hàm API trong RMS (1)
RecordStore không có hàm kh i t o.
RecordStore Class: javax.microedition.rms.RecordStore
static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary) :
M m t Recordstore, có tham s t o Record store n u nó ch a t n t i. ế ư
Ví d : ch duy nht 1 đi t ng RecordStore đc t o m c dù m nhi u l n cùng 1 tên ượ ượ
private RecordStore rs = null;
static final String REC_STORE = "db_1";
private void db(String str) {
System.err.println("Msg: " + str);
} }
public void openRecStore() {
try {
// Create record store if it does not exist
rs = RecordStore.openRecordStore(REC_STORE, true );
}
catch (Exception e) {
db(e.toString());
} }
V i tham s true, hàm s t o m t RecordStore n u nó ch a t n t i. ế ư
5
Các hàm API trong RMS (2)
Các hàm API trong RMS (2)
void closeRecordStore() : Đóng RecordStore
Ví d :
private RecordStore rs = null;
public void closeRecStore() {
try{
rs.closeRecordStore();
}
catch (Exception e) {
db(e.toString());
} }
static void deleteRecordStore(String recordStoreName) : Xóa RecordStore
static String[] listRecordStores() : Danh sách các RecordStore trong MIDlet suite, tr v
mng các chu i là tên c a RecordStore, n u không có RecordStore nào thì tr v null ế
Ví d :
public void deleteRecStore() {
if (RecordStore.listRecordStores() != null){
try {
RecordStore.deleteRecordStore(REC_STORE);
}
catch (Exception e) {
db(e.toString());
}
}}