您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

嵌入式Java运行平台数据库引擎的应用研究

时间:2007-1-20栏目:电子通信论文

){e.printStackTrace();}

//超时判断

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尚未打开和锁定该表,必须执行该表的打开和锁定操作(如果

上一页  [1] [2] [3] [4] [5] 下一页

下页更精彩:1 2 3 4 下一页