- 浏览: 95055 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
easonfans:
woweipingzui 写道和2楼一样的错...该怎么解决不 ...
JSP+Struts2+JFreeChart显示图表+鼠标事件 -
woweipingzui:
和2楼一样的错...该怎么解决
JSP+Struts2+JFreeChart显示图表+鼠标事件 -
kookaisen:
求帮忙啊,我现在遇到这个问题,试了许多种方法,还是不能解决啊~ ...
RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" -
iceglove:
"把他拷贝到eclipse或者通过后台输出,就能看到 ...
javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: Illegal character ((C -
java小书童:
:(:(:(
深入浅出基于Java的责任链模式
Berkeley DB XML入门
一、Berkeley DB XML安装及使用
在http://www.oracle.com/technology/global/cn/products/berkeley-db/xml/index.html下载BerkeleyDB XML的安装文件(dbxml-2.4.16.rar)进行安装。
完装完成后,重启计算机。
使用方法:
1、 通过cmd窗口,输入dbxml即可进入到BerkeleyDB XML的客户端窗口。可执行XQuery语句。
2、 通过JavaAPI来访问BerkeleyDB XML数据库,需要安装目录(Berkeley DB XML 2.4.16\jar)下的三个jar包:db.jar、dbxml.jar、dbxmlexamples.jar
二、java中的应用
代码在附件中:
包括四个类:
DbXmlContainerConfig.java --初始化环境、容器等信息:
JAXBUtils.java --将文档转换成java类
PhoneBook.java --文档对应的java类
MyDbXmlTest.java --包括添、删、改、查文档和添索引功能
如果朋友们觉得这篇文章对您有用,而且您需要茶叶茶具和零食之类的东东,请大家到下面这家店铺购买“品润茶业”,做批发的,价格超便宜,希望大家多多支持!
地址:http://prtea.taobao.com
请转载的朋友,把以上文字也带上,珍惜别人的劳动果实,谢谢!
一、Berkeley DB XML安装及使用
在http://www.oracle.com/technology/global/cn/products/berkeley-db/xml/index.html下载BerkeleyDB XML的安装文件(dbxml-2.4.16.rar)进行安装。
完装完成后,重启计算机。
使用方法:
1、 通过cmd窗口,输入dbxml即可进入到BerkeleyDB XML的客户端窗口。可执行XQuery语句。
2、 通过JavaAPI来访问BerkeleyDB XML数据库,需要安装目录(Berkeley DB XML 2.4.16\jar)下的三个jar包:db.jar、dbxml.jar、dbxmlexamples.jar
二、java中的应用
代码在附件中:
包括四个类:
DbXmlContainerConfig.java --初始化环境、容器等信息 JAXBUtils.java --将文档转换成java类 MyDbXmlTest.java --包括添、删、改、查文档和添索引功能 PhoneBook.java --文档对应的java类
DbXmlContainerConfig.java --初始化环境、容器等信息:
package com.test.berkeley.service.mytest; import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import com.sleepycat.db.DatabaseException; import com.sleepycat.db.Environment; import com.sleepycat.db.EnvironmentConfig; import com.sleepycat.dbxml.XmlContainer; import com.sleepycat.dbxml.XmlContainerConfig; import com.sleepycat.dbxml.XmlException; import com.sleepycat.dbxml.XmlManager; import com.sleepycat.dbxml.XmlManagerConfig; public class DbXmlContainerConfig { private Logger log = Logger.getAnonymousLogger(); private String fileHomePath = "E:/test/dbxml/data"; private static DbXmlContainerConfig dbxmlObj = null; private Environment env = null; private XmlManager xManager = null; private XmlContainer xCont = null; private Map<String, XmlContainer> xmlContainerMap; /** * 初始化 */ private DbXmlContainerConfig(){ setEnvironment(); setXmlManager(); xmlContainerMap = new HashMap<String, XmlContainer>(); } /** * 获得实例 * @return */ public static DbXmlContainerConfig getInstance(){ if(dbxmlObj == null){ dbxmlObj = new DbXmlContainerConfig(); } return dbxmlObj; } /** * 创建Environment对象 */ public void setEnvironment(){ log.info("创建Environment对象.."); //创建EnvironmentConfig对象 EnvironmentConfig envConf = new EnvironmentConfig(); envConf.setAllowCreate(true); //如果设置了true则表示当数据库环境不存在时候重新创建一个数据库环境,默认为false envConf.setInitializeCache(true); //是否打开初始化缓存 envConf.setInitializeLocking(true); //是否开启锁子系统 envConf.setInitializeLogging(true); //是否开启日志子系统 envConf.setTransactional(true); //是否使用事务,默认为false envConf.setRunRecovery(true); // envConf.setThreaded(true); // envConf.setLogAutoRemove(true); envConf.setMutexIncrement(22); // envConf.setLogInMemory(true); envConf.setLogRegionSize(1024 * 1024); // envConf.setLogBufferSize(30 * 1024 * 1024); envConf.setCacheSize(64 * 1024 * 1024); // envConf.setLockDetectMode(LockDetectMode.MINWRITE); //创建Environment对象,并初始化存储位置 File fileHome = new File(fileHomePath); try { env = new Environment(fileHome, envConf); } catch (FileNotFoundException e) { e.printStackTrace(); log.info("文件位置未找到!"); } catch (DatabaseException e) { e.printStackTrace(); log.info("数据库加载错误"); } } /** * 创建XmlManager对象 */ public void setXmlManager(){ System.out.println("setXmlManager......"); XmlManagerConfig managerConfig = new XmlManagerConfig(); managerConfig.setAdoptEnvironment(true); // managerConfig.setAllowAutoOpen(true); // managerConfig.setAllowExternalAccess(true); try { xManager = new XmlManager(env, managerConfig); } catch (XmlException ex) { ex.printStackTrace(); } } /** * 获得Environment对象 * @return */ public Environment getEnvironment(){ return env; } /** * 获得XmlManager对象 * @return */ public XmlManager getXmlManager(){ return xManager; } /** * 获得XmlContainer对象 * @param dbxmlName * @return * @throws XmlException */ public XmlContainer getXmlContainer(String dbxmlName) throws XmlException{ log.info("获得XmlContainer对象.."); if (dbxmlName == null || dbxmlName.equals("")) { return null; } if (xmlContainerMap.containsKey(dbxmlName)) { return xmlContainerMap.get(dbxmlName); } XmlContainerConfig xmlContainerConfig = new XmlContainerConfig(); xmlContainerConfig.setTransactional(true); xmlContainerConfig.setAllowCreate(true); // xmlContainerConfig.setNodeContainer(false); try { XmlContainer xmlContainer = xManager.openContainer(dbxmlName, xmlContainerConfig); xmlContainerMap.put(dbxmlName, xmlContainer); return xmlContainer; } catch (XmlException ex) { Logger.getLogger(DbXmlContainerConfig.class.getName()).log(Level.SEVERE, null, ex); } return null; } }
JAXBUtils.java --将文档转换成java类
package com.test.berkeley.service.mytest; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.Unmarshaller; import javax.xml.transform.stream.StreamSource; public class JAXBUtils { public static <T> T convertDocToJava(Class<T> bindClass, String docContent){ JAXBContext jc; Unmarshaller umn; InputStreamReader is = null; StreamSource ss; try { jc = JAXBContext.newInstance(bindClass); umn = jc.createUnmarshaller(); is = new InputStreamReader(new ByteArrayInputStream(docContent.getBytes("utf-8")), "utf-8"); ss = new StreamSource(is); JAXBElement<T> book = umn.unmarshal(ss, bindClass); return book.getValue(); } catch (Exception e) { e.printStackTrace(); return null; }finally{ if(is != null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
PhoneBook.java --文档对应的java类
package com.test.berkeley.service.mytest; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "PhoneBook", propOrder = { "name", "phone" }) /* <phonebook> <name><first>Lisa</first><last>Smith</last></name> <phone type=\"home\">420-992-4801</phone> <phone type=\"cell\">390-812-4292</phone> </phonebook> */ public class PhoneBook { @XmlElement(required = true) private PhoneBook.Name name; private PhoneBook.Phone phone; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "") public static class Name { @XmlElement(name = "first", required = true) private String first; @XmlElement(name = "last", required = true) private String last; public String getFirst() { return first; } public void setFirst(String first) { this.first = first; } public String getLast() { return last; } public void setLast(String last) { this.last = last; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "") public static class Phone { @XmlAttribute(name = "type", required = true) private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } } public PhoneBook.Name getName() { return name; } public void setName(PhoneBook.Name name) { this.name = name; } public PhoneBook.Phone getPhone() { return phone; } public void setPhone(PhoneBook.Phone phone) { this.phone = phone; } }
MyDbXmlTest.java --包括添、删、改、查文档和添索引功能
package com.test.berkeley.service.mytest; import com.sleepycat.dbxml.XmlContainer; import com.sleepycat.dbxml.XmlDocument; import com.sleepycat.dbxml.XmlException; import com.sleepycat.dbxml.XmlIndexLookup; import com.sleepycat.dbxml.XmlIndexSpecification; import com.sleepycat.dbxml.XmlManager; import com.sleepycat.dbxml.XmlQueryContext; import com.sleepycat.dbxml.XmlQueryExpression; import com.sleepycat.dbxml.XmlResults; import com.sleepycat.dbxml.XmlTransaction; import com.sleepycat.dbxml.XmlUpdateContext; import com.sleepycat.dbxml.XmlValue; public class MyDbXmlTest { protected DbXmlContainerConfig dbxmlConf = null; private String dbxmlName = "phone.dbxml"; static final private String m_StrName1 = "phone1"; static final private String m_StrXml1 = "<PhoneBook><name><first>Tom</first><last>Jones</last></name><phone type=\"home\">420-203-2033</phone></PhoneBook>"; static final private String m_StrName2 = "phone2"; static final private String m_StrXml2 = "<PhoneBook><name><first>Lisa</first><last>Smith</last></name> <phone type=\"home\">420-992-4801</phone><phone type=\"cell\">390-812-4292</phone></PhoneBook>"; static final private String m_StrName3 = "phone3"; static final private String m_StrXml3 = "<PhoneBook><name><first>Tom</first><last>Jones</last></name><phone type=\"home\">420-203-2033</phone></PhoneBook>"; static final private String m_strquery = "collection('phone.dbxml')/phonebook"; static final private String m_strquery1 = "collection('phone.dbxml')/phonebook[name/first=$name]"; public MyDbXmlTest(){ dbxmlConf = DbXmlContainerConfig.getInstance(); } public static void main(String[] args){ MyDbXmlTest myDb = new MyDbXmlTest(); try { /*添加文档*/ // myDb.addDoc(m_StrName1, m_StrXml1); // myDb.addDoc(m_StrName2, m_StrXml2); /*修改文档*/ // myDb.updateDoc(m_StrName1, m_StrXml2); /*查询文档*/ myDb.queryXmlData(m_strquery); if(myDb.getDocByKey(m_StrName3) == null){ myDb.addDoc(m_StrName3, m_StrXml3); }else{ System.out.println("Tom 已经存在!"); //删除文档 // myDb.deleteDoc(m_StrName3); } } catch (XmlException e) { e.printStackTrace(); } } /** * 保存文档 * @throws XmlException */ public void addDoc(String docName, String docStr) throws XmlException{ XmlManager x_mng = dbxmlConf.getXmlManager(); XmlContainer x_cont = dbxmlConf.getXmlContainer(dbxmlName); //创建事务 XmlTransaction x_tran = x_mng.createTransaction(); XmlUpdateContext x_updateCon = x_mng.createUpdateContext(); x_cont.putDocument(x_tran, docName, docStr, x_updateCon); x_tran.commit(); } /** * 更新文档 * @param docName * @param docStr * @throws XmlException */ public void updateDoc(String docName, String docStr) throws XmlException{ XmlManager x_mng = dbxmlConf.getXmlManager(); XmlUpdateContext m_uc = x_mng.createUpdateContext(); XmlContainer x_cont = dbxmlConf.getXmlContainer(dbxmlName); //创建事务 XmlTransaction x_tran = x_mng.createTransaction(); XmlDocument doc = x_cont.getDocument(x_tran, docName); doc.setContent(docStr); x_cont.updateDocument(x_tran, doc); x_tran.commit(); // x_cont.deleteDocument(docName, m_uc); // x_cont.putDocument(docName, docStr, m_uc); } /** * 删除文档 * @param docName * @throws XmlException */ public void deleteDoc(String docName) throws XmlException{ XmlManager x_mng = dbxmlConf.getXmlManager(); //创建事务 XmlTransaction x_tran = x_mng.createTransaction(); XmlUpdateContext m_uc = x_mng.createUpdateContext(); XmlContainer x_cont = dbxmlConf.getXmlContainer(dbxmlName); x_cont.deleteDocument(x_tran, docName, m_uc); x_tran.commit(); System.out.println("已经删除!"); } /** * 查询数据,使用xquery * @param strQuery * @throws XmlException */ public void queryXmlData(String strQuery) throws XmlException { XmlManager x_mng = dbxmlConf.getXmlManager(); XmlContainer x_cont = dbxmlConf.getXmlContainer(dbxmlName); //创建事务 XmlTransaction x_tran = x_mng.createTransaction(); XmlQueryContext m_qc = x_mng.createQueryContext(); XmlQueryExpression expr = x_mng.prepare(x_tran, strQuery, m_qc); XmlResults res = expr.execute(m_qc); x_tran.commit(); XmlValue value = new XmlValue(); /*System.out.print("Result: "); while ((value = res.next()) != null) { System.out.println("\t" + value.asString()); value.delete(); }*/ //把查询结果对应对象 while ((value = res.next()) != null) { String tempStr = value.asString(); if (tempStr != null && !tempStr.equals("")) { PhoneBook objData = JAXBUtils.convertDocToJava(PhoneBook.class, tempStr); System.out.println("name=" + objData.getName().getFirst() + "+" + objData.getName().getLast()); if(objData.getPhone() != null){ System.out.println("phone=" + objData.getPhone().getType()); } } value.delete(); } expr.delete(); } /** * 判断名称是否存在 * @param name * @return * @throws XmlException */ public boolean isEmpty(String name) throws XmlException{ XmlManager x_mng = dbxmlConf.getXmlManager(); //创建事务 XmlTransaction x_tran = x_mng.createTransaction(); XmlQueryContext m_qc = x_mng.createQueryContext(); m_qc.setVariableValue("name", new XmlValue(name)); XmlQueryExpression xqe = x_mng.prepare(x_tran, m_strquery1, m_qc); XmlResults rs = xqe.execute(m_qc); if(rs.size() > 0){ return false; } return true; } /** * 根据文档名称查找文档 * @param key * @return * @throws XmlException */ public String getDocByKey(String key) throws XmlException{ XmlManager x_mng = dbxmlConf.getXmlManager(); //创建事务 XmlTransaction x_tran = x_mng.createTransaction(); XmlContainer x_cont = dbxmlConf.getXmlContainer(dbxmlName); XmlDocument doc = null; try{ doc = x_cont.getDocument(x_tran, key); }catch(XmlException ex){ if(ex.getErrorCode() == XmlException.DOCUMENT_NOT_FOUND){ x_tran.abort(); return null; } } x_tran.commit(); String str = doc.getContentAsString(); if(doc != null && doc.getContent() != null){ return doc.getContentAsString(); } return null; } /** * 添加索引 * @throws XmlException */ public void AddIndex() throws XmlException{ XmlManager x_mng = dbxmlConf.getXmlManager(); //创建事务 XmlTransaction x_tran = x_mng.createTransaction(); XmlUpdateContext m_uc = x_mng.createUpdateContext(); XmlContainer x_cont = dbxmlConf.getXmlContainer(dbxmlName); XmlIndexSpecification ins = x_cont.getIndexSpecification(x_tran); //[unique]-{path type}-{node type}-{key type}-{syntax type} ins.addIndex("", "firstName", "node-element-substring-string"); // ins.addIndex("", "PRICE", "node-element-equality-double"); //更新索引到容器中 XmlUpdateContext xuc = x_mng.createUpdateContext(); x_cont.setIndexSpecification(x_tran, ins, xuc); x_tran.commit(); } }
如果朋友们觉得这篇文章对您有用,而且您需要茶叶茶具和零食之类的东东,请大家到下面这家店铺购买“品润茶业”,做批发的,价格超便宜,希望大家多多支持!
地址:http://prtea.taobao.com
请转载的朋友,把以上文字也带上,珍惜别人的劳动果实,谢谢!
- testBerkeleyDBXML.jar (9.5 KB)
- 下载次数: 16
发表评论
-
sitemesh定义多个装饰器
2011-10-28 15:08 3109在decorators.xml中定义多个装饰器,每个装饰器 ... -
项目连接两个数据库
2011-08-23 16:43 739写两个hibernate配置文件,一个是“hibernate. ... -
spring学习----spring注解实现AOP
2011-08-23 15:27 1141Spring----- 注解方法使用 AOP ... -
SiteMesh教程
2011-03-15 10:24 921sitemesh 应用Decorator模式,用fi ... -
struts 2 Spring Hibernate 的jar包官网下载地址
2011-03-11 10:04 2331官网的英文网站读起来有点费劲,把下载地址直接放到这儿,以后免得 ... -
深入浅出复合事件处理(CEP)
2011-03-01 14:43 1515深入浅出复合事件处理(CEP) 一个很好的ppt。。教学模式 ... -
java.io.IOException: JZ0SL: Unsupported SQL type 1111.
2011-02-24 17:30 42782011-02-24 13:17:06,217 I ... -
javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: Illegal character ((C
2011-02-24 17:04 22482今天项目中调用webservice调用方法批量提交 ... -
Quarts(定时)在Spring中应用实例
2011-01-28 10:37 1234最近项目要实现一个定时批量提交数据的功能,采用Spring的Q ...
相关推荐
《Berkeley DB XML详解》 Berkeley DB XML是一款强大的数据存储和管理工具,结合了数据库管理系统(DBMS)的功能和XML的数据表示能力。这款产品由Oracle公司开发,旨在为应用程序提供高效、灵活的XML数据存储解决...
- **XML数据库**:专门存储和检索XML文档的数据库系统,如Berkeley DB XML、MarkLogic等。 - **SQL与XML**:许多关系型数据库支持将XML作为数据类型存储,如MySQL的`BLOB`类型。 总结来说,在Linux环境中,理解和...
**Mod_dbxml 开源项目详解** `Mod_dbxml` 是一个独特的开源软件,它将业界知名的 Oracle Berkeley DB XML 数据库与广泛使用的 Apache HTTP Server 集成,为开发者提供了一种高效、灵活的方式,利用 XML 数据创建...
- **BerkeleyDB**:这是默认的数据存储方式,采用BerkeleyDB数据库来存储版本库数据。这种存储方式对操作中断非常敏感,如系统崩溃或权限问题可能导致数据库损坏,需要定期进行恢复。BerkeleyDB不支持只读加载,存储...
6. **XML数据库**:如Berkeley DB XML、BaseX等,专为XML数据设计,支持XQuery/XPath等查询语言。 #### 六、总结 Redis作为一种高性能的键值对存储系统,在Web开发、大数据处理等领域有着广泛的应用。通过对Redis...
### MyseeLite入门手册知识点详解 #### 一、MyseeLite简介 - **定义与功能**:MyseeLite是一款由Mysee自主研发的网络视频流媒体播放系统,它集成了P2P技术以及其他先进的流媒体技术,能够在现有网络带宽的基础上...
本文将重点讨论ActiveMQ的存储机制,特别是基于Berkeley DB(BDB)的存储解决方案——activemq-store-bdb-2.0.jar,以及其在实际应用中的作用。 一、ActiveMQ与BDB存储 ActiveMQ提供了多种存储策略,包括文件系统...
1. 数据库接口(DBM):提供了一致的API来访问各种类型的数据存储,包括GDBM、NDBM、Berkeley DB等。 2. XML解析:集成了解析XML文档的库,如expat,使得XML数据的处理更加简单。 3. URL处理:提供了处理和解析URL的...
- 可以选择使用数据库(如 BerkeleyDB、Derby)或简单的文本文件来存储数据。 - 基于这些数据,利用 Lucene 创建索引。 2. **查询处理**: - 接收来自前端的搜索请求,提取查询关键词。 - 构建查询对象(例如...
- **Berkeley DB**:提供数据库支持。 - **bzip2/libbzip2**:用于数据压缩。 - **OpenSSL Toolkit**:实现加密功能。 - **SSLeay**:提供加密库支持。 - **Expat**:用于XML解析。 - **STLport**:增强标准模板库的...
这些工具涵盖了数据库连接(如 Berkeley DB、MySQL、PostgreSQL)、加密函数(如 MD5 和 SHA)、XML 解析(如 libxml2)以及数据类型转换等。在 `apr-util-1.3.12` 版本中,我们可以期待一系列经过优化和稳定的接口...
- **BdbFrontier**:使用Berkeley DB存储URI,提供高效的数据存储和检索。 **五、多线程机制** Heritrix通过多线程(ToeThread和ToePool)提高爬取效率,每个线程负责处理单独的URI。 **六、处理器链Processor** ...