📄 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 + -