- 浏览: 3513919 次
- 性别:
- 来自: 大连
博客专栏
-
使用Titanium Mo...
浏览量:37478
-
Cordova 3.x入门...
浏览量:604304
-
常用Java开源Libra...
浏览量:678049
-
搭建 CentOS 6 服...
浏览量:87250
-
Spring Boot 入...
浏览量:399811
-
基于Spring Secu...
浏览量:69066
-
MQTT入门
浏览量:90468
文章分类
最新评论
-
afateg:
阿里云的图是怎么画出来的?用什么工具?
各云服务平台的架构图 -
cbn_1992:
博主,采用jdbctoken也就是数据库形式之后,反复点击获取 ...
Spring Security OAuth2 Provider 之 数据库存储 -
ipodao:
写的很是清楚了,我找到一份中文协议:https://mcxia ...
MQTT入门(6)- 主题Topics -
Cavani_cc:
还行
MQTT入门(6)- 主题Topics -
fexiong:
博主,能否提供完整源码用于学习?邮箱:2199611997@q ...
TensorFlow 之 构建人物识别系统
一个通用的事务保护,100%纯Java编写的嵌入式NoSQL数据库,采取开源(免费)和商用(付费)的双License的授权模式。Berkeley DB是历史悠久的嵌入式数据库系统,06年被 Oracle 收购,而Berkeley DB Java Edition是Berkeley DB产品中的一部分。
http://www.oracle.com/technetwork/products/berkeleydb/downloads/index.html
版本:Berkeley DB Java Edition 5.0.73.zip
(1)打开Database环境
(2)打开Database
(3)简单的CRUD
(4)不同的数据写入方式
(5)不同的数据读取方式
(6)对象的读写
(7)直接持久层应用(DPL:Direct Persistence Layer)
(8)事务处理
(9)游标操作
(10)关闭database
(11)关闭database环境
引用
Berkeley DB Java Edition is a open source, transactional storage solution for Java applications. The Direct Persistence Layer (DPL) API is faster and easier to develop, deploy, and manage than serialized object files or ORM-based Java persistence solutions. The Collections API enhances the standard java.util.collections classes allowing them to be persisted to a local file system and accessed concurrently while protected by ACID transactions. Data is stored by serializing objects and managing class and instance data separately so as not to waste space. Berkeley DB Java Edition is the reliable drop-in solution for complex, fast, and scalable storage.
http://www.oracle.com/technetwork/products/berkeleydb/downloads/index.html
版本:Berkeley DB Java Edition 5.0.73.zip
(1)打开Database环境
EnvironmentConfig envCfg = new EnvironmentConfig(); //当数据库环境不存在的时候,创建一个数据库环境,默认为false. envCfg.setAllowCreate(true); //以只读方式打开,默认为false. envCfg.setReadOnly(false); //事务支持,默认为false. envCfg.setTransactional(true); Environment mydbEnv = new Environment(new File(envHome), envCfg); System.out.println("Env Config: " + mydbEnv.getConfig());
(2)打开Database
DatabaseConfig dbCfg = new DatabaseConfig(); dbCfg.setAllowCreate(true); dbCfg.setReadOnly(false); dbCfg.setTransactional(true); Database mytestdb = mydbEnv.openDatabase(null, "VendorDB", dbCfg); System.out.println("Database Name: " + mytestdb.getDatabaseName());
(3)简单的CRUD
//C String key = "key-rensanning"; String value = "This is a test!(000)"; DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("utf-8")); DatabaseEntry valEntry = new DatabaseEntry(value.getBytes("utf-8")); OperationStatus status = mytestdb.put(null, keyEntry, valEntry); System.out.println("Put Status: " + status); //R DatabaseEntry valGet = new DatabaseEntry(); status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) { value = new String(valGet.getData(), "utf-8"); System.out.println("Read Value:" + value); } //U value = "This is a test!(111)"; status = mytestdb.put(null, keyEntry, new DatabaseEntry(value.getBytes("utf-8"))); status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) { value = new String(valGet.getData(), "utf-8"); System.out.println("Update Value:" + value); } //D status = mytestdb.delete(null, keyEntry); System.out.println("Delete Status: " + status);
(4)不同的数据写入方式
String key = "key-rensanning"; DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("utf-8")); DatabaseEntry valGet = new DatabaseEntry(); String value = "This is a test!(by 'put' method)"; //Database.put(): 向数据库写入数据,如果不支持重复记录,则会覆盖更新key对应的已有记录 OperationStatus status = mytestdb.put(null, keyEntry, new DatabaseEntry(value.getBytes("utf-8"))); status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) { value = new String(valGet.getData(), "utf-8"); System.out.println("Put Value:" + value); } //Database.putNoOverwrite():向数据库写入数据,但是如果key已经存在,不会覆盖已有数据(即使数据库支持重复key) value = "This is a test!(by 'putNoOverwrite' method)"; status = mytestdb.putNoOverwrite(null, keyEntry, new DatabaseEntry(value.getBytes("utf-8"))); status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) { value = new String(valGet.getData(), "utf-8"); System.out.println("PutNoOverwrite Value:" + value); } //*****设置一个key是否允许存储多个值***** DatabaseConfig dbCfg = new DatabaseConfig(); dbCfg.setAllowCreate(true); dbCfg.setReadOnly(false); dbCfg.setTransactional(true); dbCfg.setSortedDuplicates(true); Database mytestdb2 = mytestdb.getEnvironment().openDatabase(null, "DuplicatesDB", dbCfg); //Database.putNoDupData():向数据库写入数据(该方法仅用于支持重复key的数据库),如果key和value对应的记录已经存在,那么操作结果是:OperationStatus.KEYEXIST value = "This is a test!(by 'putNoDupData' method)"; status = mytestdb2.putNoDupData(null, keyEntry, new DatabaseEntry(value.getBytes("utf-8"))); if (status == OperationStatus.SUCCESS) { value = new String(valGet.getData(), "utf-8"); System.out.println("PutNoOverwrite Value:" + value); } else if (status == OperationStatus.KEYEXIST) { System.out.println("putNoDupData KEYEXIST:" + key); } status = mytestdb2.get(null, keyEntry, valGet, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) { value = new String(valGet.getData(), "utf-8"); System.out.println("putNoDupData Value:" + value); } if (null != mytestdb2) { mytestdb2.close(); mytestdb2 = null; }
(5)不同的数据读取方式
String key = "key-rensanning"; String value = "This is a test!(000)"; DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("utf-8")); DatabaseEntry valEntry = new DatabaseEntry(value.getBytes("utf-8")); OperationStatus status = mytestdb.put(null, keyEntry, valEntry); System.out.println("Put Status: " + status); DatabaseEntry valGet = new DatabaseEntry(); //Database.get() :检索key对应的记录 status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) { value = new String(valGet.getData(), "utf-8"); System.out.println("Read Value(get):" + value); } //Database.getSearchBoth() :根据key和value 检索数据库记录 status = mytestdb.getSearchBoth(null, keyEntry, valGet, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) { value = new String(valGet.getData(), "utf-8"); System.out.println("Read Value(getSearchBoth):" + value); }
(6)对象的读写
//C String key = "key-rensanning-Object"; Person value = new Person(9527, "rensanning", true); DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("utf-8")); DatabaseEntry valEntry = new DatabaseEntry(); PersonTupleBinding personBinding = new PersonTupleBinding(); personBinding.objectToEntry(value, valEntry); OperationStatus status = mytestdb.put(null, keyEntry, valEntry); System.out.println("Put Person Status: " + status); //R DatabaseEntry valGet = new DatabaseEntry(); status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT); if (status == OperationStatus.SUCCESS) { value = personBinding.entryToObject(valGet); System.out.println("Read Person Value:" + value.getId() + "\t" + value.getName() + "\t" + value.isSex()); }
class Person { int id; String name; boolean sex; public Person() { } public Person(int id, String name, boolean sex) { this.id = id; this.name = name; this.sex = sex; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isSex() { return sex; } public void setSex(boolean sex) { this.sex = sex; } }
class PersonTupleBinding extends TupleBinding<Person> { @Override public Person entryToObject(TupleInput input) { Person p = new Person(); p.setId(input.readInt()); p.setName(input.readString()); p.setSex(input.readBoolean()); return p; } @Override public void objectToEntry(Person p, TupleOutput output) { output.writeInt(p.getId()); output.writeString(p.getName()); output.writeBoolean(p.isSex()); } }
(7)直接持久层应用(DPL:Direct Persistence Layer)
Environment env = mytestdb.getEnvironment(); StoreConfig storeConfig = new StoreConfig(); storeConfig.setAllowCreate(true); storeConfig.setTransactional(true); EntityStore store = new EntityStore(env, "StoreDB", storeConfig); PrimaryIndex<String, UserInfo> pIndex = store.getPrimaryIndex(String.class, UserInfo.class); //C pIndex.put(new UserInfo("001", "user001")); pIndex.put(new UserInfo("002", "user002")); pIndex.put(new UserInfo("003", "user003")); pIndex.put(new UserInfo("004", "user004")); pIndex.put(new UserInfo("005", "user005")); //R String myKey = "001"; UserInfo getData = pIndex.get(myKey); System.out.println("Read User 001:" + getData); //U pIndex.put(new UserInfo("002", "user002222")); //Read ALL EntityCursor<UserInfo> cursor = pIndex.entities(); try { Iterator<UserInfo> i = cursor.iterator(); while (i.hasNext()) { System.out.println("Cursor data:" + i.next()); } } finally { cursor.close(); } //D String pkey = "003"; boolean flag = pIndex.delete(pkey); System.out.println("delete object :" + pkey + " result:" + flag); //关闭store if (store != null) { store.close(); store = null; }
@Entity @SuppressWarnings("serial") class UserInfo implements Serializable { @PrimaryKey private String userId; private String userName; public UserInfo() { } public UserInfo(String userId, String userName) { this.userId = userId; this.userName = userName; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "UserInfo [userId=" + userId + ", userName=" + userName + "]"; } }
(8)事务处理
Transaction txn = mytestdb.getEnvironment().beginTransaction(null, null); try { for(int i = 0; i < 5; i++) { mytestdb.put(txn, new DatabaseEntry(("TXN-KEY"+(i+1)).getBytes("utf-8")), new DatabaseEntry(("TXN-VALUE"+(i+1)).getBytes("utf-8"))); } } catch (DatabaseException e) { if (txn != null) { txn.abort(); txn = null; } throw e; } finally { if (txn != null) { txn.commit(); } }
(9)游标操作
//C for(int i = 0; i < 5; i++) { mytestdb.put(null, new DatabaseEntry(("KEY"+(i+1)).getBytes("utf-8")), new DatabaseEntry(("VALUE"+(i+1)).getBytes("utf-8"))); } DatabaseEntry key = new DatabaseEntry(); DatabaseEntry value = new DatabaseEntry(); //D (by Cursor) Transaction txn = mytestdb.getEnvironment().beginTransaction(null, null); Cursor cursor1 = mytestdb.openCursor(txn, null); OperationStatus result1 = cursor1.getFirst(key, value, null); while (result1 == OperationStatus.SUCCESS) { if ("VALUE3".equals(new String(value.getData(), "utf-8"))) { cursor1.delete(); } result1 = cursor1.getNext(key, value, null); } if (cursor1 != null) { cursor1.close(); } if (txn != null) { txn.commit(); } //R (by Cursor) Cursor cursor2 = mytestdb.openCursor(null, null); OperationStatus result2 = cursor2.getFirst(key, value, null); while (result2 == OperationStatus.SUCCESS) { System.out.println("Cursor Read Value:" + new String(value.getData(), "utf-8")); result2 = cursor2.getNext(key, value, null); } if (cursor2 != null) { cursor2.close(); }
(10)关闭database
//关闭database if (mytestdb != null) { mytestdb.close(); mytestdb = null; }
(11)关闭database环境
//关闭database环境 if (mydbEnv != null) { mydbEnv.sync();//把数据同步到磁盘中去 mydbEnv.cleanLog();//清理日志 mydbEnv.close(); mydbEnv = null; }
- JEsample.zip (2.2 MB)
- 下载次数: 55
- _Apress_The_Berkeley_DB_Book_2007_.rar (4 MB)
- 下载次数: 49
- _Apress_The_Definitive_Guide_to_Berkeley_DB_XML_2006_.rar (1.6 MB)
- 下载次数: 34
发表评论
-
Web API分页
2018-11-13 13:38 1503(一)分页类型 逻辑分页(客户端分页):从数据库将所有记录查询 ... -
JAXB实例入门
2017-06-09 10:17 1703JAXB(Java Architecture for XML ... -
Java Web项目中的Event
2017-06-05 09:42 1612(1)Servlet的事件和监听器 *** Servle ... -
关于Java SPI
2017-05-04 12:07 1985SPI:Service Provider Interface ... -
Jackson实例入门
2017-05-03 12:55 1635Jackson:Java平台的JSON解析器。 版本: ja ... -
为什么https被redirect成了http?
2016-11-14 09:35 7638全站HTTPS并不是配置证书CA,改改路径URL那么简单! ... -
简化Java代码
2016-10-09 11:25 1246样板代码Boilerplate Code的 ... -
Java Web Project based on Spring
2016-09-28 11:21 985基于Spring开发Web项目的标配Library。 工具 ... -
Eclipse Scrapbook快速测试Java代码
2016-09-09 15:12 1276Scrapbook是Eclipse提供的特 ... -
Java爬取 百度图片&Google图片&Bing图片
2016-08-04 09:54 7455先看看抓取的结果。 抓关键字“美女”的百度图片: 抓关键字 ... -
学习Java容易混淆的一概念
2016-05-13 11:01 1607基础篇 (1)== vs equals() ... -
20年Java发展历程(1995-2015)
2015-03-25 21:58 2275Java语言作为现在最流行的编程语言之一,它已经经历了整整20 ... -
Java命令行选项解析之Commons-CLI & Args4J & JCommander
2014-11-27 12:09 22378熟悉Linux命令的都知道几乎所有程序都会提供一些命令行选项。 ... -
Java调用Native API之JNA
2014-11-10 12:09 7711Java调用C/C++的Native API一般采用JNI(J ... -
Java执行SSH/SCP之JSch
2014-08-27 17:17 11422JSch (Java Secure Channel)是纯Jav ... -
GC日志分析
2014-07-18 08:54 2821GC:Garbage Collection 垃圾回收 (1) ... -
Java元组类型之javatuples
2014-05-20 10:58 26915关于方法的返回值,经常需要返回2个值或多个值的一个序列,比如数 ... -
Java 8 之 反编译Lambda表达式(CFR)
2014-04-14 09:34 6470CFR(Class File Reader) - anoth ... -
Java 8 之 Optional类
2014-04-08 14:38 2930在Java中,null代表一个不存在的对象,如果对它进行操作就 ... -
Java 8 之 Lambda表达式
2014-04-01 09:14 16123Java 8历时2年8个月,这次升级是继Java 5之后对Ja ...
相关推荐
vedis-python, Vedis嵌入式 NoSQL 数据库的python 绑定 Vedis嵌入式 NoSQL 数据库的快速 python 绑定。...快速的嵌入式数据库,。查看 vedis python文档 。特性Vedis特性:嵌入式,零conf数据库事务性( ACID )单
《NoSQL数据库原理与应用案例教程》PPT课件(共9单元)第4章 HBase原理实现.pdf《NoSQL数据库原理与应用案例教程》PPT课件(共9单元)第4章 HBase原理实现.pdf《NoSQL数据库原理与应用案例教程》PPT课件(共9单元)第4章 ...
亚硝酸盐数据库:Java嵌入式nosql文档存储
JAVA操作NOSQL数据库,包括hbase,cassandra,kudu,文档和代码都有。
快速Python绑定, 是一个轻量级的嵌入式NoSQL数据库和JSON文档存储。请注意在考虑使用它之前,请阅读的问题跟踪器。 自2014年以来,UnQLite尚未出现任何有意义的发展。强烈建议您使用 。 Sqlite具有对强大支持,并且...
NoSQL数据库 14信管一班2组23殷月园 NoSQL数据库PPT全文共20页,当前为第1页。 内容大纲 定义 产生 共同特征 分类 适用场景 发展现状 7 挑战 NoSQL数据库PPT全文共20页,当前为第2页。 一.什么是NoSQL数据库? NoSQL...
● 了解Oracle NoSQL数据库架构及其底层数据存储引擎Oracle Berkeley数据库 ● 安装和配置Oracle NoSQL数据库以获得最优性能 ● 使用丰富的API开发复杂的分布式应用程序 ● 读写Oracle NoSQL数据库键值存储中的...
NoSQL数据库技术实战 数据库书籍!
nosql数据库的发展和应用研究
《大数据挑战与NoSQL数据库技术》共分为三部分。理论篇重点介绍大数据时代下数据处理的基本理论及相关处理技术,并引入NoSQL数据库;系统篇主要介绍了各种类型NoSQL数据库的基本知识;应用篇对国内外几家知名公司在...
NoSQL数据库学习教程.pdf
详细地介绍NoSQL数据库,NoSQL数据库的特点,适用场景,与关系型数据库的对比,Redis数据库的介绍,Redis与MongoDB数据库、MySQL数据库的比较,Redis数据库在Linux系统下的安装与部署。
Nitrite是嵌入式数据库,非常适合桌面,移动或小型Web应用程序。 特点: 无模式文档收集和对象存储库 内存/基于文件的存储 可插拔存储引擎-mvstore,mapdb,rocksdb ACID交易 模式迁移 索引编制 全文搜索 Rx-...
NoSQL数据库之Redis数据库管理二(string类型和hash类型)
这个是我写的NOsql数据库的论文也是期末作业,有需要的可以下载下来用
065-NoSql数据库之漏洞利用方法总结.pdf
8种主流NoSQL数据库对比,有时间可以了解了解
很好用的NoSQL 数据库, google 使用此数据库存储自己的用户信息, 它能够处理海量数据,效率高
BerkeleyDB诞生.. 1991 Google发表了三大论文:诞生了Bigtable 2008年参考bigtable,Hbase从hadoop中诞生 2006 以SAP的HANA为代表的内存计算数据库,以google的spanner为代表的高性能分布式数据库. 2010 Memcached...