Record Management System (RMS). 5.[r]
(1)Giáo viên : Tr nh Th Vân Anhị ị
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
Ầ
(2)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 tồ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 Record ằ ệ ố ữ ọ
Management System (RMS)
RMS h th ng đệ ố ượ ổc t ch c qu n lý dứ ả ướ ại d ng 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 k t qu c a m t ể ứ ấ ữ ệ ể ố ỗ ự ộ ả ế ả ủ ộ
Record m t chu i (m ng) 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 khơi ph c ể ữ ữ ệ ằ ọ ữ ệ ụ
l i d li u ban đ u Kích thạ ữ ệ ầ ước d li u không đữ ệ ược vu t 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 nh t ộ ố ị ấ
M t t p b n ghi(RecordStore) t p h p Record độ ậ ả ậ ợ ượ ắc s p x p có th t M i ế ứ ự ỗ
Record không th đ ng đ c l p mà ph i thu c vào m t RecordStore đó, thao tác ể ứ ộ ậ ả ộ ộ
trên Record ph i thơng qua RecordStore ch a Khi t o m t Record RecordStore, ả ứ ộ
Record gán m t s đ nh danh ki u s nguyên g i Record ID Record đ u tiên độ ố ị ể ố ọ ầ ược t o s đạ ẽ ược gán Record ID 1,s tăng thêm cho Record ti p theo Record ID không ẽ ế
là ch m c (index), thao tác xóa Record RecordStore s khơng tính tốn l i ỉ ụ ẽ
Record ID c a Record hi n có khơng thay đ i Record ID c a Record đủ ệ ổ ủ ượ ạc t o m i, ví d : xóa record id 3, thêm m t record m i s có id Data m t dãy byte đ i ụ ộ ẽ ộ
di n cho d li u c n l u.ệ ữ ệ ầ
Tên dung đ phân bi t RecordStore b MIDlet (MIDlet suite) MIDlet ể ệ ộ
suite t p MIDlet có chung khơng gian tên (name space), chia s tài nguyên (nh ậ ẻ
RecordStore), bi n tĩnh (static variable) l p MIDlet s đế ẽ ược đóng gói m t file tri n khai N u ng d ng c a b n ch có m t MIDlet ộ ể ế ứ ụ ủ ỉ ộ
RecordStore đượ ục s d ng phân bi t l n b ng tên Tên c a RecordStore có ệ ẫ ằ ủ
(3)3
Các v n đ liên quan đ n RMS
ấ
ề
ế
Các v n đ liên quan đ n RMS
ấ
ề
ế
H n ch v kh 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 RMS thay đ i tùy
ệ ư
ữ ữ ệ
ổ
theo thi t b di đ ng Đ c t MIDP yêu c u r ng nhà s n xu t thi t b di đ ng
ế ị
ộ
ặ ả
ầ ằ
ả
ấ
ế ị
ộ
ph i dành vùng nh có kích th
ả
ớ
ướ
c nh t 8K cho vi c l u tr d li u
ấ
ệ ư
ữ ữ ệ
RMS Đ c t không nêu gi i h n cho m i Record RMS cung c p API đ
ặ ả
ớ ạ
ỗ
ấ
ể
xác đ nh kích th
ị
ướ ủ
c c a m i Record, t ng dung l
ỗ
ổ
ượ
ng c a RecordStore kích
ủ
th
ướ
c l i c a vùng nh Do q trình phát tri n ng d ng
ạ ủ
ớ
ể
ứ
ụ
J2ME b n ph i cân nh c vi c s d ng vùng nh này.
ạ
ả
ắ
ệ ụ
ớ
T c đ truy xu t d li u :
ố
ộ
ấ ữ ệ
Các thao tác vùng nh s ch m h n nhi u
ớ
ẽ
ậ
ơ
ề
truy xu t d li u b nh RAM Gi ng nh t c đ đ c c ng 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à 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 RMS s dành riêng m t Thread đ th c hi n thao tác
ả
ắ
ẽ
ộ
ể ự
ệ
RecordStore Tuy nhiên n u có nhi u MIDlet Thread chia s m t
ế
ề
ẻ ộ
RecordStore ph i ý đ n k thu t l p trình Thread đ đ m b o khơng có s
ả
ế
ỹ
ậ ậ
ể ả
ả
ự
(4)4
Các hàm API RMS (1)
Các hàm API 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 ch a t n t i ộ ố ế
Ví d : chụ
ỉ
nh
ất đ i tố ượng RecordStore đượ ạc t o m c dù m nhi u l n 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()); } }
(5)5
Các hàm API RMS (2)
Các hàm API 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 RecordStore MIDlet suite, tr
ả ề
v
m
ảng chu i tên c a RecordStore, n u khơng có RecordStore tr v null ỗ ủ ế ả ề Ví d :ụ
public void deleteRecStore() {
if (RecordStore.listRecordStores() != null){ try {
RecordStore.deleteRecordStore(REC_STORE); }
catch (Exception e) {
db(e.toString()); }
(6)29
Searching with RecordFilter –
Searching with RecordFilter –
SearchStreams
SearchStreams
(2)
(2)
public void writeTestData() {
String[] names = {"Lan : Lop C04 CNTT HVCNBCVT", "Thu : K45 CNTT Dai Hoc Bach Khoa HN",
"Hoai Anh : K39 QTDN Truong Kinh Te Quoc Dan",
"Yen Chi : Lop Anh Ngu Truong Dai Hoc Ngoai Ngu HN"}; boolean[] sex = {true, false, true, true};
int[] rank = {3, 0, 1, 2};
writeStream(names, sex, rank); }
private void searchRecordStore() {
try { // Record store is not empty
if (rs.getNumRecords() > 0) {// Setup the search filter with the user requested text SearchFilter search = new SearchFilter(tfFind.getString());
RecordEnumeration re =
rs.enumerateRecords(search, null, false);
(7)30
Searching with RecordFilter –
Searching with RecordFilter –
SearchStreams
SearchStreams
(3)
(3)
ByteArrayInputStream strmBytes = new ByteArrayInputStream(re.nextRecord());
DataInputStream strmDataType = new DataInputStream(strmBytes); // Read Java data types from the above byte array
siMatch.setText(strmDataType.readUTF()); // Show matching result in stringItem component on form
search.searchFilterClose(); // Close record filter strmBytes.close(); // Close stream
strmDataType.close(); // Close stream re.destroy(); // Free enumerator } } }
catch (Exception e) { db(e.toString()); }