技术开发 频道

开源数据库:Berkeley DB和SQLite

    3. 应用Java与Berkeley DB的接口 

    Berkeley DB并不是一个关系型的数据库。不能应用标准的SQL语句对数据库操作,对它的操作要调用专用的API实现。这些API提供了查询、插入、删除等功能。比如com.sleepycat.db.Db类代表数据库对象。Db类的put()方法完成的是插入功能,get()方法完成的是读出数据的功能。 com.sleepycat.db.Dbc是Berkeley DB的游标类,提供了遍历数据库记录的功能。 

    Berkeley DB每一个记录都有一个键值和对应的数据值,而键值和数据必须是类com.sleepycat.db.Dbt的对象或其子类的对象。Dbt提供了一些方法可以将byte数组或Object对象保存到Dbt的对象中去。比如,Dbt类中的set_data(byte[])或set_object (Object)方法。注意到目前Berkeley DB中的Java API命名方法并不符合Java的命名规范,比如set_data()方法应该命名为setData()方法。Berkeley DB许诺在下一个版本中会提供符合命名规范的Java API。 

    Berkeley DB对任何存入的数据都是直接原样存储到数据文件中去,无论其是二进制数据还是ASCII或Unicode等编码的文本。通常可以利用这一特性和Java串行化的概念方便的进行数据的存取。例如声明一个类:

public class AccountInfo implements Serializable{ //帐户信息 public String loginName; public String password; public boolean auotLogin;

     在这个AccountInfo类中仅仅包含了数据项的定义。我们完全可以将这个类看作数据库的表中字段定义。可以用Berkeley DB保存AccountInfo对象的串行化二进制数据,以此来保存这个对象中的变量值。在操作中,先对Dbt的对象调用set_object (AccountInfo)方法,而后把这个Dbt对象作为一条纪录保存到表中。当然,我们也可以应用继承Dbt类的方法来完成对数据的保存。 

     下面这段简单代码演示如何将数据存入到数据库中,然后再用游标对象浏览全部数据。

//注意,下面的程序的忽略了对异常处理,写入数据初始化等等一些代码,请在适当修改后再编 //译运行它 Db dbFile = null; //生成Db对象 dbFile = new Db(null, 0); //用BTree方式打开数据库,库文件是在c:/temp下的mydata.db文件,表名是employee //如果数据库不存在,则自动生成一个新的数据库。 dbFile.open(null,"c:tempmydata.db","employee",Db.DB_BTREE, Db.DB_CREATE,0); Dbt key = new Dbt(); Dbt data = new Dbt(); //向库文件中插入一条数据,如果已经存在,打印出错信息 if (dbFile.put(null,key, data, Db.DB_APPEND) == Db.DB_KEYEXIST) { System.out.println("Key already exists."); } //关闭数据文件 dbFile.close(0); //重新打开数据文件 dbFile = new Db(null, 0); dbFile.open(null, "c:tempmydata.db", "employee", Db.DB_UNKNOWN, 0, 0644); // 声明一个数据库游标Dbc对象iterator Dbc iterator = dbFile.cursor(null, 0); // 遍历整个表 Dbt key = new Dbt(); while (iterator.get(key, data, Db.DB_NEXT) == 0) { System.out.println("reading"); } //关闭游标和数据文件 iterator.close(); dbFile.close(0);

    在运行Berkeley DB的程序时勿必在系统环境变量PATH中设置libdb41.dll和 libdb_java41.dll所在的路径。

0
相关文章