嵌入式Java运行平台数据库引擎的应用研究
//超时判断
t2=System.currentTimeMillis();
if(t2-t1>DBError.TIMEOUT)break;
}
//发生超时退出循环情况,抛出例外
if(isLocked){
throw new DBError(DBError.TIMEOUT_ERR,name);
}
//设定锁定标志
isLocked=true;
}
//表打开操作
//参数ro只读打开标志
void open(Boolean ro)throws DBError{
lock();
readOnly=ro;
//表数据读入
load();
}
//表关闭操作(同时释放锁)
public synchronized void close() throws DBError{
if(isLocked==false)return;
//关闭前,保存数据
if(isDirty)save();
if(isUnload)unload();
//释放锁,通知其它等待线程
isLocked=false;
notify();
}
图3 DB引擎组件主要类的关系
2.5 DB组件实现的结构设计
图3所示为DB引擎组件的主要类之间的关系。其中,Database为数据库类,用于描述和管理整个数据库对象Table为数据表类,用于描述和管理表对象;TableData用于描述和管理保存表数据的物理介质(文件);Field为字段类,用于描述和管理字段类型信息;Record为记录类,描述一条数据记录。为简化处理,本组件将Database类设计为singleton模式,即本组件只能创建一个Database实例。这对于嵌入式系统来说,大部分场合已经足够。与数据库的一般物理概念相对应,1个Database实例包含n个Table实例,1个Table实例包含n个Field实例。同时,1个Table实例包含1个TableData实例,1个TableData实例包含n个Record实例。
Connection类用于管理用户访问数据库的会话(Session)过程。对应一个用户的一次会话过程,生成一个Connection实例。Connection类对象保存着当前Session打开的Table列表,当用户提交执行某SQL语句而需要锁定某个Table时,系统首先检查该表是否已经在当前Session已打开的Table列表中。如果已经被打开,则不需要进行重复的锁定操作,直接反回对应的Table对象实例。反之,如果尚未包含在打开的Table列表中,表明当前Session尚未打开和锁定该表,必须
《嵌入式Java运行平台数据库引擎的应用研究(第4页)》