近一直在使用java,随着使用时间的加长,对java也有了更深入的了解。从今天开始,我会写一些关于java的专题内容,希望大家喜欢,也希望各位多多讨论指正。
这一次先介绍一下Berkeley DB的java版本,Berkeley DB Java Edition (JE)。
JE 适合于管理海量的,简单的数据。其中的记录都以简单的键值对保存,即key/value对。由于它操作简单,效率较高,因此受到了广泛的好评。下面我就带领大家看看JE 是如果使用的吧~
JE 下载地址:http://www.oracle.com/technology/software/products/berkeley-db/je/index.html
下载完成解亚后,把JE_HOME/lib/je-.jar 中的jar文件添加到你的环境变量中就可以使用je了。
相关帮助文档可以参考 JE_HOME/docs/index.html
源代码见JE_HOME/src/*.*
下面是具体的使用代码,大家可以参考一下,注释还是比较详细的,有什么不懂的可以给我留言~
2 * 打开当前数据库
3 */
4 public void openDatabase() {
5 // TODO Auto-generated method stub
6 try{
7 CheckMethods.PrintDebugMessage("打开数据库: "+dbName);
8 EnvironmentConfig envConfig = new EnvironmentConfig();
9 envConfig.setAllowCreate(true);
10 envConfig.setTransactional(true);
11 envConfig.setReadOnly(false);
12 envConfig.setTxnTimeout(10000, TimeUnit.MILLISECONDS);
13 envConfig.setLockTimeout(10000, TimeUnit.MILLISECONDS);
14 /*
15 * 其他配置 可以进行更改
16 EnvironmentMutableConfig envMutableConfig = new EnvironmentMutableConfig();
17 envMutableConfig.setCachePercent(50);//设置je的cache占用jvm 内存的百分比。
18 envMutableConfig.setCacheSize(123456);//设定缓存的大小为123456Bytes
19 envMutableConfig.setTxnNoSync(true);//设定事务提交时是否写更改的数据到磁盘,true不写磁盘。
20 //envMutableConfig.setTxnWriteNoSync(false);//设定事务在提交时,是否写缓冲的log到磁盘。如果写磁盘会影响性能,不写会影响事务的安全。随机应变。
21 *
22 */
23 File file = new File(fileName);
24 if(!file.exists())
25 file.mkdirs();
26 myDbEnvironment = new Environment(file,envConfig);
27
28 dbConfig = new DatabaseConfig();
29 dbConfig.setAllowCreate(true);
30 dbConfig.setTransactional(true);
31 dbConfig.setReadOnly(false);
32 //dbConfig.setSortedDuplicates(false);
33 /*
34 setBtreeComparator 设置用于B tree比较的比较器,通常是用来排序
35 setDuplicateComparator 设置用来比较一个key有两个不同值的时候的大小比较器。
36 setSortedDuplicates 设置一个key是否允许存储多个值,true代表允许,默认false.
37 setExclusiveCreate 以独占的方式打开,也就是说同一个时间只能有一实例打开这个database。
38 setReadOnly 以只读方式打开database,默认是false.
39 setTransactional 如果设置为true,则支持事务处理,默认是false,不支持事务。
40 */
41 if(myDatabase == null)
42 myDatabase = myDbEnvironment.openDatabase(null, dbName, dbConfig);
43
44 CheckMethods.PrintDebugMessage(dbName+"数据库中的数据个数: "+myDatabase.count());
45 /*
46 * Database.getDatabaseName()
47 取得数据库的名称
48 如:String dbName = myDatabase.getDatabaseName();
49
50 Database.getEnvironment()
51 取得包含这个database的环境信息
52 如:Environment theEnv = myDatabase.getEnvironment();
53
54 Database.preload()
55 预先加载指定bytes的数据到RAM中。
56 如:myDatabase.preload(1048576l); // 1024*1024
57
58 Environment.getDatabaseNames()
59 返回当前环境下的数据库列表
60 Environment.removeDatabase()
61 删除当前环境中指定的数据库。
62 如:
63 String dbName = myDatabase.getDatabaseName();
64 myDatabase.close();
65 myDbEnv.removeDatabase(null, dbName);
66
67 Environment.renameDatabase()
68 给当前环境下的数据库改名
69 如:
70 String oldName = myDatabase.getDatabaseName();
71 String newName = new String(oldName + ".new", "UTF-8");
72 myDatabase.close();
73 myDbEnv.renameDatabase(null, oldName, newName);
74
75 Environment.truncateDatabase()
76 清空database内的所有数据,返回清空了多少条记录。
77 如:
78 Int numDiscarded= myEnv.truncate(null,
79 myDatabase.getDatabaseName(),true);
80 CheckMethods.PrintDebugMessage("一共删除了 " + numDiscarded +" 条记录 从数据库 " + myDatabase.getDatabaseName());
81 */
82 }
83 catch(DatabaseException e){
84 CheckMethods.PrintInfoMessage(e.getMessage());
85
86 }
87 }
由于考虑到多线程,因此上面的方法都采用了事务,这样可以很好的保证数据的正确性。
来源 https://www.cnblogs.com/luchen927/archive/2011/06/25/2090400.html