?? curriculumdao.java
字號:
import javax.microedition.rms.*;
import java.io.IOException;
/**
* 該類是一個數據訪問對象(DAO)類,提供了對記錄存儲中課程對象的訪問方法。
*/
public class CurriculumDAO {
private static final String RS_NAME = "CURRICULUM"; //記錄存儲名
private static CurriculumDAO dao = null; //數據訪問對象實例
private RecordStore rs; //記錄存儲
private FindFilter filter; //過濾器
private RecordComparator comparator; //比較器
private CurriculumDAO() {
filter = new FindFilter(); //創建過濾器
comparator = new CurrComparator(); //創建比較器
}
//獲取一個數據訪問對象的實例
public static CurriculumDAO getInstance() {
if(dao == null) {
dao = new CurriculumDAO();
}
return dao;
}
//打開課程對象的記錄存儲
public void openRecordStore() throws DAOException {
try {
rs = RecordStore.openRecordStore(RS_NAME, true); //打開記錄存儲,如果不存在就新建立一個記錄存儲
}
catch(RecordStoreException rse) {
throw new DAOException("打開記錄存儲失敗!\n原因:\n" + rse.getMessage());
}
}
//關閉課程對象的記錄存儲
public void closeRecordStore() throws DAOException {
try {
rs.closeRecordStore();
}
catch(RecordStoreException rse) {
throw new DAOException("關閉記錄存儲失敗!\n原因:\n" + rse.getMessage());
}
}
//保存課程對象curr到記錄存儲中
public void save(Curriculum curr) throws DAOException {
if(find(curr.getDay(), curr.getTime()).length != 0) {
throw new DAOException("保存課程對象失敗!\n原因:\n上課時間發生沖突!\n"
+ Curriculum.WEEKS_LABEL[curr.getDay()] + " "
+ Curriculum.JIE_LABEL[curr.getTime()] + "已經有課。");
}
try {
byte[] data = curr.sequence(); //序列化課程對象curr
int id = curr.getID();
if(id == -1) { //新增課程對象
rs.addRecord(data, 0, data.length);
}
else { //更新
rs.setRecord(id, data, 0, data.length);
}
}
catch(IOException ioe) {
throw new DAOException("保存課程對象失敗!\n原因:\n" + ioe.getMessage());
}
catch(RecordStoreException rse) {
throw new DAOException("保存課程對象失敗!\n原因:\n" + rse.getMessage());
}
}
//刪除id課程對象
public void delete(int id) throws DAOException {
try {
rs.deleteRecord(id);
}
catch(RecordStoreException rse) {
throw new DAOException("刪除課程對象失敗!\n原因:\n" + rse.getMessage());
}
}
//查找所有名字為name的課程對象
public Curriculum[] find(String name) throws DAOException {
filter.setCondition(name); //設置過濾條件
return getCurriculumArray(filter, comparator);
}
//查找week這天所有的課程對象
public Curriculum[] find(int week) {
filter.setCondition(week); //設置過濾條件
return getCurriculumArray(filter, comparator);
}
//查找指定日期,時間的課程
public Curriculum[] find(int week, int time) {
filter.setCondition(week, time);
return getCurriculumArray(filter, comparator);
}
//獲取記錄存儲中所有的課程對象
public Curriculum[] getAll() {
return getCurriculumArray(null, comparator);
}
//獲取符合過濾器rf條件,并且排序的課程對象數組
private Curriculum[] getCurriculumArray(RecordFilter rf, RecordComparator rc) {
RecordEnumeration re = null;
try {
re = rs.enumerateRecords(rf, rc, false);
}
catch(RecordStoreException rse) {
//
}
Curriculum[] curricula;
if(re != null) {
int size = re.numRecords();
curricula = new Curriculum[size];
byte[] data = null;
for(int i=0; i<size; i++) {
try {
int id = re.nextRecordId();
data = rs.getRecord(id);
curricula[i] = Curriculum.unSequence(data);//反序列化,生成課程對象
curricula[i].setID(id);
}
catch(RecordStoreException rse) {
System.out.println("錯誤!" + rse.getMessage());
}
catch(IOException ioe) {
System.out.println("錯誤!" + ioe.getMessage());
}
}
}
else {
curricula = new Curriculum[0];
}
return curricula;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -