二、BDB je常见操作

  JE要求在任何DATABASE操作前,要先打开数据库环境,就像我们要使用数据库的话必须得先建立连接一样。你可以通过数据库环境来创建和打开database,或者更改database名称和删除database.

         可以通过Environments对象来打开环境,打开环境的时候设置的目录必须是已经存在的目录,否则会出错误。默认情况下,如果指定的database不存在则不会自动创建一个新的detabase,但可以通过设置setAllowCreate来改变这一情况。

1.       打开database环境

示例:

Environment env = null;

           EnvironmentConfig envconfig = new EnvironmentConfig();

           envconfig.setAllowCreate(true);

    env = new Environment(new File("D://bdb"), envconfig);

2.       关闭database环境

可以通过Environment.close()这个方法来关闭database环境,当你完成数据库操作后一定要关闭数据库环境。

示例:

if(env!=null){

              try {

                  env.cleanLog();

                  env.close();

              } catch (DatabaseException e) {

                  e.printStackTrace();

              }

             

        }

3.       清理日志

通常在关闭数据库连接的时候,有必要清理下日志,用以释放更多的磁盘空间。我们可以在Environment.close前执行下Environment.cleanLog()来达到此目的。

示例:

try {

    if (myDbEnvironment != null) {

        myDbEnvironment.cleanLog(); // 在关闭环境前清理下日志

        myDbEnvironment.close();

    }

} catch (DatabaseException dbe) {

    // Exception handling goes here

}

4.      Database环境配置

可以通过EnvironmentConfig这个对象来配置database环境。如果想得到当前环境的配置信息则可以通过Environment.getConfig()方法得到当前环境的配置信息。

也可以使用 EnvironmentMutableConfig来配置环境,其实 EnvironmentConfigEnvironmentMutableConfig的子类,所以EnvironmentMutableConfig 能够使用的设置,EnvironmentConfig也同样能够使用。

如果你要获取当前环境的使用情况,那么你可以通过使用EnvironmentStats.getNCacheMiss().来监视RAM cache命中率。EnvironmentStats可以由Environment.getStats()方法获取。

EnvironmentConfig常见方法介绍:

EnvironmentConfig.setAllowCreate() ; 如果设置了true则表示当数据库环境不存在时候重新创建一个数据库环境,默认为false.

EnvironmentConfig.setReadOnly(); 只读方式打开,默认为false.

EnvironmentConfig.setTransactional();事务支持,如果为true,则表示当前环境支持事务处理,默认为false,不支持事务处理。

 

                   EnvironmentMutableConfig常用方法介绍:

                            setCachePercent();设置当前环境能够使用的RAM占整个JVM内存的百分比.

setCacheSize();设置当前环境能够使用的最大RAM。单位BYTE.

setTxnNoSync();当提交事务的时候是否把缓存中的内容同步到磁盘中去。true 表示不同步,也就是说不写磁盘.

setTxnWriteNoSync();当提交事务的时候,是否把缓冲的log写到磁盘上。true 表示不同步,也就是说不写磁盘

 

                   Database操作

BDB中,数据是以key/value方式成队出现的。

打开database

可以通过environment.openDatabase()方法打开一个database,在调用这个方法的时候必须指定database的名称。和databaseConfig() (注:数据库设置)

示例:

DatabaseConfig dbconfig=new DatabaseConfig();

           dbconfig.setAllowCreate(true);

    db=env.openDatabase(null, "dbac.db", dbconfig);

关闭database

通过调用Database.close()方法来关闭数据库,但要注意,在关闭数据库前必须得先

把游标先关闭。

示例:

if(db!=null){

              try {

                  db.close();

              } catch (DatabaseException e) {

                  e.printStackTrace();

              }

           }

设置数据库属性

其实设置数据库属性跟设置环境属性差不多,JE中通过DatabaseConfig对象来设置数据库属性。你能够设置的数据库属性如下:

 

DatabaseConfig.setAllowCreate(),如果是true的话,则当不存在此数据库的时候创建一个。DatabaseConfig.setBtreeComparator(),设置用于Btree比较的比较器,通常是用来排序。

DatabaseConfig.setDuplicateComparator(),设置用来比较一个key有两个不同值的时候的大小比较器。

DatabaseConfig.setSortedDuplicates(),设置一个key是否允许存储多个值,true代表允许,默认false

DatabaseConfig.setExclusiveCreate(),以独占的方式打开,也就是说同一个时间只能有一实例打开这个database

DatabaseConfig.setReadOnly(),以只读方式打开database,默认是false

DatabaseConfig.setTransactional(),如果设置为true,则支持事务处理,默认是false,不支持事务。

 

一些用来管理的方法

Database.getDatabaseName(),取得数据库的名称,

如:String dbName = myDatabase.getDatabaseName();

Database.getEnvironment(),取得包含这个database的环境信息

:Environment theEnv = myDatabase.getEnvironment();

Database.preload(),预先加载指定bytes的数据到RAM

: myDatabase.preload(1048576l); // 1024*1024

Environment.getDatabaseNames(),返回当前环境下的数据库列表

: import java.util.List;

List myDbNames = myDbEnv.getDatabaseNames();

for(int i=0; i < myDbNames.size(); i++) {

    System.out.println("Database Name: " + (String)myDbNames.get(i));

}

Environment.removeDatabase(),删除当前环境中指定的数据库

: String dbName = myDatabase.getDatabaseName();

myDatabase.close();

myDbEnv.removeDatabase(null, dbName);

Environment.renameDatabase(),给当前环境下的数据库改名

如:String oldName = myDatabase.getDatabaseName(); 

String newName = new String(oldName + ".new", "UTF-8");

myDatabase.close();

myDbEnv.renameDatabase(null, oldName, newName);

Environment.truncateDatabase(),清空database内的所有数据,返回清空了多少条记录

: Int numDiscarded= myEnv.truncate(null,myDatabase.getDatabaseName(),true);

System.out.println("一共删除了 " + numDiscarded +" 条记录 从数据库 " + myDatabase.getDatabaseName());

Environment.sync(),方法来把数据同步到磁盘中去。

 

database中添加、读取、删除数据的方法:

Database.put(),database中添加一条记录。如果你的database不支持一个key对应多个data或当前database中已经存在该key了,则使用此方法将使用新的值覆盖旧的值。

Database.putNoOverwrite(),database中添加新值但如果原先已经有了该key,则不覆盖。不管database是否允许支持多重记录(一个key对应多个value),只要存在该key就不允许添加,并且返回perationStatus.KEYEXIST信息。

Database.putNoDupData(),database中添加一条记录,如果database中已经存在了相同的 keyvalue则返回 OperationStatus.KEYEXIST

Database.get(),基本的读记录的方法,通过key的方式来匹配,如果没有改记录则返回OperationStatus.NOTFOUND

Database.getSearchBoth(),通过keyvalue来同时匹配,同样如果没有记录匹配keyvalue则会返回OperationStatus.NOTFOUND

Database.delete(),这个方法来删除记录。如果你的database支持多重记录,则当前key下的所有记录都会被删除,如果只想删除多重记录中的一条则可以使用游标来删除。当然你也可以使用Environment.truncateDatabase()这个方法来清空database 中的所有记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值