日期:2014-05-16 浏览次数:20647 次
[转]下载地址(这些小程序依例丢在code.google上):http://code.google.com/p/greenvm/downloads/list
LMini是Loonframework分支项目之一,它是一个仅有55KB的纯Java嵌入式文本数据库,不支持SQL语句,完全以面向对象方式 进行数据操作,在Loonframework主包中主要负责实现缓存数据的硬盘持久化功能。但作为项目分支,LMini并非必须与 Loonframework主包集成,也允许作为单独的微型数据库存在。
LMini的开发目的在于提供一种简单快捷的本地数据持久化方式,如游戏记录、文件缓存、简单的增、删、改、查操作都可以通过LMini得以实现, 它的优势在于完全脱离java.sql包依赖,比db4o、sqllite体积更小,比Properties所提供的功能等多。
LMini通过MDB接口进行数据库操作,而根据MDB接口所获得的不同实例,操作模式又可分为如下三种,即:内存模式、单一文件模式及多文件模式。
内存模式:
实例化此模式后,将直接在内存开辟一块区域进行数据库模拟操作,当程序关闭时内存数据库也随之消失,不能持久化保存,调用方法为Engine.getMEMDB。
单一文件模式:
实例化此模式后,数据库将以文件形式存在,程序会自动产生唯一的物理文件于硬盘之上,所有操作也将基于此物理文件进行,只要此文件不被删除数据将永久存在,调用方法为Engine.getMDBOnly。
多文件模式:
实例化此模式后,数据库将以文件夹形式存在,程序会自动根据创建的表格产生多个物理文件于此文件夹中,所有操作将基于此文件夹进行,只要此文件夹及其中文件不被破坏,数据将永久存在,调用方法为Engine.getMDBMany。
以上三种模式皆为接口实现,操作方法完全一致,仅在保存方式上有所分别。
基本操作方式:
1、数据库的创建与打开:
?? 当我们对MDB接口进行实例化,并调用begin方法后,LMini会自动监测指定位置是否已有文本数据库存在,有则加载其文件内容,没有将自动创建一个空数据库于指定位置。
?? LMini以一个begin方法打开数据库连接,以end方法关闭连接,具体代码如下:
???????  view plaincopy to clipboardprint?
MDB mdb = Engine.getMDBOnly("c:\\test.db");??  
mdb.begin();??  
mdb.end();  
MDB mdb = Engine.getMDBOnly("c:\\test.db");
mdb.begin();
mdb.end();
2、密码保护功能:
除内存模式之外,LMini提供了简单的密码保护功能,以防止数据库文件被他人盗用,只要在begin创建数据库时设定即可,密码错误时再次打开此文件将提示异常,具体代码如下:
??  view plaincopy to clipboardprint?
MDB mdb = Engine.getMDBOnly("test.db");??  
mdb.openTable("test",TypeBase.STRING);??  
//设定密码??  
mdb.begin("wt98ab");??  
mdb.end();  
MDB mdb = Engine.getMDBOnly("test.db");
mdb.openTable("test",TypeBase.STRING);
//设定密码
mdb.begin("wt98ab");
mdb.end();
3、增、删、改、查:
??? LMini以openTable方法打开或创建一个指定表格,但区别于其它数据库,Lmini每个表格仅允许保存一种数据类型,以简化LMini文件处理 过程;目前其支持的类型为Long,Integer,String,Byte[],Object五种,我们可以通过Lmini提供的TypeBase类注 入需要的类型。不填写情况Lmini将默认表格存储类型为Object,也就是所有经过序列化的对象都可以存储于本地硬盘之上。
??? LMini针对CRUD提供了相对应的insert、select、update、delete方法以供调用,只要注入相关对象即可完成操作,具体代码如下:
???  view plaincopy to clipboardprint?
MDB mdb = Engine.getMDBOnly("test.db");??  
mdb.openTable("test",TypeBase.STRING);??  
//设定密码??  
mdb.begin("wt98ab");??  
//插入数据??  
mdb.insert("久保","砍砍砍");??  
mdb.insert("尾田", "我要成为海军");??  
mdb.insert("岸本", "都死光了");??  
//删除数据??  
mdb.delete("岸本");??  
//变更数据??  
mdb.update("尾田", "我要成为海贼王");??  
//查询??  
System.out.println(mdb.select("尾田"));??  
mdb.end();  
MDB mdb = Engine.getMDBOnly("test.db");
mdb.openTable("test",TypeBase.STRING);
//设定密码
mdb.begin("wt98ab");
//插入数据
mdb.insert("久保","砍砍砍");
mdb.insert("尾田", "我要成为海军");
mdb.insert("岸本", "都死光了");
//删除数据
mdb.delete("岸本");
//变更数据
mdb.update("尾田", "我要成为海贼王");
//查询
System.out.println(mdb.select("尾田"));
mdb.end(); 
????  
4、表格中数据的遍历:
?? LMini提供了getTableKey方法以获得当前表格下所有字段名,提供了getTableList方法以获得当前表格下所有字段及数据,具体代码如下:
???????  view plaincopy to clipboardprint?
MDB mdb = Engine.getMDBOnly("test.db");??  
???????  mdb.openTable("test",TypeBase.STRING);??  
???????  //设定密码??  
???????  mdb.begin("wt98ab");??  
???????  //插入数据??  
???????  mdb.insert("久保","砍砍砍");??  
???????  mdb.insert("尾田", "我要成为海军");??  
???????  mdb.insert("岸本", "都死光了");??  
???????  //删除数据??  
???????  mdb.delete("岸本");??  
???????  //变更数据??  
???????  mdb.update("尾田", "我要成为海贼王");??  
???????  //查询??  
???????  System.out.println("尾田说:"+mdb.select("尾田"));??  
??????????  
???????  for(Iterator it=mdb.getTableKey().iterator();it.hasNext();){??  
???????????  String name=(String)it.next();??  
???????????  System.out.println("字段名:"+name);??  
???????????  System.out.println("数据: "+(String)mdb.getTableList().get(name));??  
???????  }??  
??????????  
???????  mdb.end();  
MDB mdb = Engin