精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java使用XML作為持久存儲介質(zhì)實(shí)現(xiàn)方法

開發(fā)
對一些需要將數(shù)據(jù)持久化的小型程序中,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫顯得龐大而不實(shí)用,OO數(shù)據(jù)庫有一個學(xué)習(xí)曲線的問題,而使用XML是一種較好的選擇.本文將就設(shè)計(jì)一個合理的XML持久化的解決方案進(jìn)行探討.

使用XML作為持久層解決方案的,它的基本功能要有:

1.對象的CRUD功能(本例中基本對象是Member類).

2.保證線程安全,對桌面程序和Web程序都一樣適用.

3.有緩存,在存儲介質(zhì)即XML文件突然丟失的情況下還能有效工作.

本例采用了MemberService和MemberPersistence兩個類來協(xié)作完成這些功能.

MemberService是業(yè)務(wù)層和持久層之間的橋梁,用于對Member對象的CRUD操作,內(nèi)置一個hashtable來緩存Member對象,即使文件突然丟失,緩存中的數(shù)據(jù)也不會被影響.它內(nèi)置一個MemberPersistence成員來完成與持久介質(zhì)的交互.

實(shí)現(xiàn)添加,刪除,更新的三個函數(shù)add(),delete(),update()都用lockObj實(shí)現(xiàn)了同步,這樣就無需擔(dān)心線程安全問題.其它函數(shù)對members成員沒有修改,故不需要實(shí)現(xiàn)同步.

try{ 

memberPersistence.add(member);

members.put(member.getId(), member);

return true;

}

catch(XmlFileWriteException ex){

   System.out.println("Member:" + member.getId() + " add error!");

   return false;

}

當(dāng)MemberPersistence添加對象成功后,這個對象才會被添加到members中,這樣保證了緩存和實(shí)際數(shù)據(jù)的同步;如果顛倒一下順序,那末MemberPersistence添加對象不成功時,出現(xiàn)XmlFileWriteException異常,這是還需要在catch中刪除剛才添加的對象,這樣做人為加大了程序的復(fù)雜度,不如上面的做法簡單高效.

關(guān)于查詢函數(shù)的做法不明白的請見 http://www.blogjava.net/sitinspring/archive/2007/06/05/122119.html 中形式三.

下面是MemberService類的全部代碼:

package com.

import java.util.ArrayList;

import java.util.Collections;

import java.util.Hashtable;

import java.util.Iterator;

import java.util.List;

import com.sitinpsring.domain.Member;

import com.sitinpsring.domain.MemberFilter;

import com.sitinpsring.exception.XmlFileReadException;

import com.sitinpsring.exception.XmlFileWriteException;

import com.sitinpsring.persistence.MemberPersistence;

public class MemberService {

private static Hashtable members;

private static MemberPersistence memberPersistence;

private static final Object lockObj = new Object();

static {

try {

memberPersistence = new MemberPersistence("member.xml");

members = memberPersistence.loadMemberFromFile();

} catch (XmlFileReadException ex) {

System.out.println("Can’t read the file:member.xml");

}catch (XmlFileWriteException ex) {

System.out.println("Can’t write to the file:member.xml");

}

}

public MemberService() {

}

public boolean hasMember(String id) {

return members.containsKey(id);

}

public boolean hasMember(Member member) {

return hasMember(member.getId());

}

public boolean add(Member member) {

if (hasMember(member)) {

System.out.println("Member:" + member.getId() + " has been exist!");

return false;

} else {

synchronized (lockObj) {

try{

memberPersistence.add(member);

members.put(member.getId(), member);

return true;

}

catch(XmlFileWriteException ex){

System.out.println("Member:" + member.getId() + " add error!");

return false;

}

}

}

}

public boolean update(Member member) {

if (hasMember(member)) {

synchronized (lockObj) {

try{

memberPersistence.update(member);

Member oldMember = members.get(member.getId());

oldMember.setName(member.getName());

oldMember.setAge(member.getAge());

return true;

}

catch(XmlFileWriteException ex){

System.out.println("Member:" + member.getId() + " upate error!");

return false;

}

}

} else {

System.out.println("Member:" + member.getId()

+ " can’t been found!");

return false;

}

}

public boolean saveOrUpdate(Member member) {

if (hasMember(member)) {

return update(member);

} else {

return add(member);

}

}

public boolean delete(Member member) {

if (hasMember(member)) {

synchronized (lockObj) {

try{

memberPersistence.delete(member.getId());

members.remove(member.getId());

return true;

}catch(XmlFileWriteException ex){

System.out.println("Member:" + member.getId() + " delete error!");

return false;

}

}

} else {

System.out.println("Member:" + member.getId()

+ " can’t been found!");

return false;

}

}

@SuppressWarnings("unchecked")

public List search(MemberFilter memberFilter) {

ArrayList retval = new ArrayList();

for (Iterator it = members.keySet().iterator(); it.hasNext();) {

String key = (String) it.next();

Member member = members.get(key);

if (memberFilter.accept(member)) {

retval.add(member);

}

}

Collections.sort(retval);

return retval;

}

public List getAll() {

MemberFilter filter = new MemberFilter() {

public boolean accept(Member member) {

return true;

}

};

return search(filter);

}

public Member getMemberById(String id) {

for (Iterator it = members.keySet().iterator(); it.hasNext();) {

String key = (String) it.next();

Member member = members.get(key);

if (member.getId().equals(id)) {

return member;

}

}

return null;

}

}

MemberPersistence類是與XML文件打交道的類,通過它,數(shù)據(jù)才能真正存入持久介質(zhì)-XML文件.它的函數(shù)都很好理解.這些函數(shù)工作時實(shí)際只會引發(fā)兩種異常--讀XML文件異常(一般由多個根節(jié)點(diǎn)導(dǎo)致)和寫XML文件異常,會觸發(fā)這些異常的函數(shù)都應(yīng)該對他們進(jìn)行捕獲和拋出處理.

package com.sitinpsring.persistence; 

import java.io.File;

import java.io.FileWriter;

import java.util.Hashtable;

import java.util.Iterator;

import java.util.List;

import org.dom4j.Document;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

import com.sitinpsring.domain.Member;

import com.sitinpsring.exception.XmlFileReadException;

import com.sitinpsring.exception.XmlFileWriteException;

public class MemberPersistence {

private String xmlFilePos;

private Document document;

public MemberPersistence(String xmlFilePos)

throws XmlFileReadException,XmlFileWriteException{

this.xmlFilePos = xmlFilePos;

if (isFileExist(this.xmlFilePos) == false) {

// Create document when file not exist

            createDocument();

return;

} else {

// Get Docunent when file exist

            SAXReader reader = new SAXReader();

try {

document = reader.read(new File(this.xmlFilePos));

} catch (Exception ex) {

throw new XmlFileReadException(ex.getMessage());

}

}

}

private void createDocument() throws XmlFileWriteException{

String text = "";

try {

document = DocumentHelper.parseText(text);

writeDocumentToFile();

} catch (XmlFileWriteException ex) {

throw ex;

}catch (Exception ex) {

ex.printStackTrace();

}

}

private void writeDocumentToFile() throws XmlFileWriteException{

try {

XMLWriter writer = new XMLWriter(new FileWriter(this.xmlFilePos));

writer.write(document);

writer.close();

} catch (Exception ex) {

throw new XmlFileWriteException(ex.getMessage());

}

}

public Hashtable loadMemberFromFile() {

Hashtable retval=new Hashtable();

List nodes = document.getRootElement().elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) {

Element elm = (Element) it.next();

Member member = new Member(elm.attributeValue("id"),elm.elementText("name"),

Integer.parseInt(elm.elementText("age")));

retval.put(member.getId(), member);

}

return retval;

}

public boolean add(Member member) throws XmlFileWriteException{

try {

Element rootElm = document.getRootElement();

Element newMemberElm = rootElm.addElement("member");

newMemberElm.addAttribute("id", member.getId());

Element nameElm=newMemberElm.addElement("name");

nameElm.setText(member.getName());

Element ageElm=newMemberElm.addElement("age");

ageElm.setText(String.valueOf(member.getAge()));

writeDocumentToFile();

return true;

} catch (XmlFileWriteException ex) {

throw ex;

}

}

public boolean update(Member member) throws XmlFileWriteException{

try {

Element rootElm = document.getRootElement();

List nodes = rootElm.elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) {

Element elm = (Element) it.next();

if(elm.attributeValue("id").equals(member.getId())){

elm.element("name").setText(member.getName());

elm.element("age").setText(String.valueOf(member.getAge()));

break;

}

}

writeDocumentToFile();

return false;

} catch (XmlFileWriteException ex) {

throw ex;

}

}

public boolean delete(String id) throws XmlFileWriteException{

try {

Element rootElm = document.getRootElement();

List nodes = rootElm.elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) {

Element elm = (Element) it.next();

Member member = new Member(elm.attributeValue("id"),elm.elementText("name"),

Integer.parseInt(elm.elementText("age")));

if(member.getId().equals(id)){

rootElm.remove(elm);

break;

}

}

writeDocumentToFile();

return false;

} catch (XmlFileWriteException ex) {

throw ex;

}

}

public static boolean isFileExist(String filePath) {

boolean exists = (new File(filePath)).exists();

return exists;

}

}

【編輯推薦】

  1. PHP中使用XML-RPC構(gòu)造Web Service簡單入門
  2. 詳解Java解析XML的四種方法
  3. XML新手入門 創(chuàng)建構(gòu)造良好的XML
責(zé)任編輯:彭凡 來源: 51CTO
相關(guān)推薦

2017-11-21 14:32:05

容器持久存儲

2021-06-18 16:30:52

戴爾

2020-03-25 11:37:17

存儲云原生DevOps

2013-05-03 11:01:22

iOS開發(fā)歸檔永久存儲數(shù)據(jù)

2023-08-29 07:34:43

Mimir微服務(wù)

2018-06-21 15:14:51

Kubernetes存儲容器

2018-07-19 10:56:16

Kubernetes存儲架構(gòu)

2021-01-26 14:11:19

加密貨幣數(shù)字貨幣比特幣

2018-04-08 09:01:08

全閃存陣列AFA

2009-07-17 14:51:22

.Net Micro

2010-07-22 15:33:36

BlackBerry開

2022-08-22 07:58:14

容器云存儲開發(fā)

2017-12-06 09:00:14

2009-05-04 10:25:36

XML.NET數(shù)據(jù)

2010-10-28 10:10:48

oracle存圖片

2019-12-27 13:50:04

JavaAPI代碼

2023-11-26 09:06:46

2017-10-19 16:21:02

SCM存儲技術(shù)

2010-10-29 16:12:51

Oracle存儲過程

2021-12-15 12:00:17

Pythonpickle存儲
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

日韩欧美资源站| 国产成人短视频在线观看| 久久精品国产77777蜜臀| 欧美猛男gaygay网站| 91网站免费观看| 成人在线短视频| 国内精品偷拍视频| 特黄特色欧美大片| 中文字幕一区二区三区四区| 久久国产精品久久久| 国产一区二区四区| 日本黄色一级视频| 亚洲图片小说区| 亚洲视频网在线直播| 97视频人免费观看| 日韩av自拍偷拍| 欧美自拍第一页| 香蕉久久夜色精品国产| 欧美一区二区视频网站| 蜜桃麻豆91| 99在线视频免费| 伊人手机在线| 日韩av网站免费在线| 日韩精品自拍偷拍| 日韩亚洲不卡在线| 中文在线观看免费网站| 国产一区二区精品调教| 99re成人精品视频| 亚洲91精品在线| 人与嘼交av免费| 欧美高清一级片| 久久久精品蜜桃| 青青a在线精品免费观看| 在线视频一二区| 免费在线观看黄色网| 石原莉奈在线亚洲二区| 久久人人爽人人爽爽久久| 人妻丰满熟妇av无码久久洗澡| 亚洲一区二区小说| 欧美日韩黄色大片| 97神马电影| av片在线免费看| 国产精品17p| 亚洲精品ww久久久久久p站| 国产精彩精品视频| 国产在线观看h| 电影一区二区在线观看| 欧美精品自拍偷拍| 四虎永久在线精品无码视频| 色黄网站在线观看| 国产精品国产精品国产专区不片 | 亚洲精蜜桃久在线| 麻豆久久久久久久久久| 韩国女主播一区二区三区| 欧美视频中文在线看| 国产精品亚洲不卡a| 国产精品久久久久久99| 国产综合自拍| 精品99久久久久久| 国产精品亚洲αv天堂无码| 成全电影大全在线观看| 91视频91自| 国产69精品久久久久99| 国产又粗又猛大又黄又爽| 亚洲电影有码| 在线免费视频一区二区| 国产麻豆电影在线观看| 欧美一级淫片aaaaaa| 精久久久久久久久久久| 国产精品视频不卡| 欧美日韩大片在线观看| 国产精品jk白丝蜜臀av小说 | 91丨九色丨丰满| 国产精品麻豆久久| 欧美成人精品3d动漫h| 337p粉嫩大胆噜噜噜鲁| 触手亚洲一区二区三区| 国产精品自拍在线| 久久久日本电影| 欧美日韩综合一区二区| 欧美成年网站| 在线不卡中文字幕| www.cao超碰| 成人污版视频| 精品成人久久av| 精品一区二区三区视频日产| jlzzjlzzjlzz亚洲人| 国产成人精品免费在线| 国产麻豆日韩| 日韩一二三四| 麻豆久久一区二区| 成人欧美在线视频| 蜜桃av噜噜一区二区三区麻豆| 久久综合影视| 国产在线观看不卡| www.蜜桃av.com| 奇米777欧美一区二区| 国产精品流白浆视频| 97在线播放免费观看| 国产91丝袜在线观看| 精品国产乱码久久久久久88av| 女人天堂在线| 《视频一区视频二区| 精品无人区一区二区三区竹菊| 欧美美女搞黄| 国产精品免费观看视频| 996这里只有精品| 国产美女性感在线观看懂色av| av成人动漫在线观看| 91aaaa| 成人高潮片免费视频| 久久女同互慰一区二区三区| 亚洲一区二区中文字幕| 亚洲图片欧美在线| 在线亚洲激情| 国产精品揄拍一区二区| 一级成人黄色片| 中文字幕午夜精品一区二区三区| 久久久久亚洲精品国产| 免费av中文字幕| 丁香婷婷综合色啪| 国产欧美日韩高清| 天堂在线中文资源| 97精品久久久久中文字幕| 天堂一区二区三区 | 国产伦精品一区二区三区在线| 日韩二区三区| 亚洲精品视频在线观看网站| 日本一区二区免费看| 超碰在线caoporn| 色中色一区二区| 岛国大片在线播放| 六九午夜精品视频| 日韩电影免费观看在线观看| 日本r级电影在线观看| 综合综合综合综合综合网| 成人97在线观看视频| 欧美风情第一页| 香蕉视频国产精品| 欧美成年人网站| 国产精品国产精品国产| 日韩不卡一区二区三区| 国产欧美日韩综合一区在线观看 | 影音先锋在线播放| 欧美色图在线观看| 日韩人妻一区二区三区| 亚洲日本成人| av一区观看| yw视频在线观看| 欧美日在线观看| 波多野结衣影院| 老汉色老汉首页av亚洲| 插插插亚洲综合网| 一本大道伊人av久久综合| 国产日韩欧美电影| 裸体大乳女做爰69| 在线观看av免费| 欧美日韩三级在线| 欧美a在线播放| 青草国产精品久久久久久| 欧美日本亚洲| 欧美极品免费| 欧美日韩成人在线一区| 日本少妇高潮喷水xxxxxxx| 99国产精品视频免费观看一公开| 亚洲资源在线看| yellow91字幕网在线| 91麻豆精品国产91久久久| 手机精品视频在线| 日本高清免费电影一区| 国产精品黄色影片导航在线观看| 国产精品一区二区免费视频| 国产精品乱码久久久久久| 一区二区三区韩国| 精品精品视频| 欧美成人精品在线观看| 国产精品无码白浆高潮| 一区二区三区中文字幕精品精品| 99久久综合网| 五月天久久777| 99精品国产高清一区二区| jizz一区二区三区| 亚洲精品视频在线播放| 欧美性受xxx黑人xyx性爽| 国产精品久久久久天堂| 日本77777| 欧美精品一级| 精品无人区一区二区三区竹菊| 中文在线а√天堂| 制服丝袜亚洲播放| 玖玖爱免费视频| 26uuu欧美| xxww在线观看| 好看的av在线不卡观看| 久久亚洲综合网| 日韩精品一区二区三区av| 久久久精品免费视频| 人妻少妇精品无码专区| 在线观看日产精品| 黄色一级片中国| 91小视频在线观看| 亚洲 激情 在线| 国产精品99一区二区| 青娱乐国产91| 在线日韩成人| 国产精品wwwwww| 中文字幕在线播放网址| 亚洲成色777777女色窝| 日本一区二区免费电影| 亚洲精品综合在线| 一区二区精品免费| 国产精品一二三四五| 国产亚洲天堂网| 午夜亚洲福利| 日韩不卡av| y111111国产精品久久久| 欧美亚洲视频一区二区| а√天堂资源地址在线下载| 亚洲理论在线a中文字幕| 国产精品一区二区人人爽| 黑人狂躁日本妞一区二区三区 | 久久久久久亚洲av无码专区| 一区二区三区在线视频播放| 欧洲美熟女乱又伦| gogo大胆日本视频一区| 网站在线你懂的| 日韩二区在线观看| 国产精品久久..4399| 欧美视频在线视频精品| 97精品在线视频| 国产不卡在线| 中文字幕日韩av| 国产三级第一页| 欧美综合一区二区三区| 日本黄色片视频| www.亚洲免费av| а 天堂 在线| 麻豆国产欧美日韩综合精品二区 | 欧美日韩午夜在线视频| 久久精品国产成人av| eeuss国产一区二区三区| 视频在线观看免费高清| 久久久青草婷婷精品综合日韩| 国产在线视频综合| 99久久人爽人人添人人澡| 国产人妖伪娘一区91| 欧美精选视频一区二区| 自拍偷拍亚洲区| 欧美在线一卡| 日韩大陆毛片av| 色丁香婷婷综合久久| 亚洲观看高清完整版在线观看| 午夜国产福利视频| 91丨porny丨最新| 国产人妻黑人一区二区三区| 粉嫩绯色av一区二区在线观看| 九色91porny| 国产精品一级二级三级| 性折磨bdsm欧美激情另类| 国产一本一道久久香蕉| 男人添女荫道口女人有什么感觉| 在线一区免费| 中文字幕av导航| 国产精品久久久久无码av| 在线观看成人av电影| 999国产精品| 国产免费一区二区三区四在线播放| 国产精品精品| 欧美 亚洲 视频| 国产综合精品| 成熟了的熟妇毛茸茸| 久久久噜噜噜| 亚洲久久中文字幕| 国产一区二区三区免费观看| 欧美人与性动交α欧美精品| 顶级嫩模精品视频在线看| 国产成人av无码精品| 久久婷婷一区二区三区| 亚欧精品视频一区二区三区| 中文字幕一区二区三区色视频| 91视频青青草| 亚洲丶国产丶欧美一区二区三区| 日本熟妇乱子伦xxxx| 夜色激情一区二区| 成人免费区一区二区三区| 色综合久久天天综合网| 欧美性受xxx黑人xyx性爽| 欧美色电影在线| 国产伦精品一区二区三区四区 | 操91在线视频| 新版中文在线官网| 777777777亚洲妇女| 欧美××××黑人××性爽| 国产伦精品免费视频| 精品国产亚洲日本| 国产在线一区二| 西野翔中文久久精品国产| 亚洲午夜精品国产| 亚洲欧洲一区| 99热一区二区| 成人美女视频在线看| 免费看91的网站| 亚洲国产中文字幕| 中文字幕日本人妻久久久免费 | 国产精品97在线| 九九热在线视频观看这里只有精品| 俄罗斯女人裸体性做爰| 久久丝袜美腿综合| 亚洲 欧美 变态 另类 综合| 香蕉成人伊视频在线观看| 综合久久中文字幕| 亚洲精品一区二区在线观看| 国产精品99999| 欧美激情在线观看视频| 日韩毛片一区| 国产专区一区二区三区| 国产精品久久久久久| 国产女大学生av| 国产一区二区三区在线观看免费视频| 日韩www视频| 亚洲精品日韩一| 中文字幕av无码一区二区三区| 亚洲精品在线免费观看视频| 日本福利专区在线观看| 欧美一区二区三区四区在线| 国产一区二区视频在线看| 欧美一区二区三区在线播放 | 精品一区国产| 综合av在线| 手机看片一级片| 久久久影院官网| 久久精品国产亚洲AV无码麻豆| 欧美日韩精品高清| 日韩资源在线| 97在线观看视频国产| 国产精品一区二区三区av | 久久精品99无色码中文字幕| 一级毛片久久久| 国产精品我不卡| 国内自拍一区| 91精品国产高清91久久久久久| 久久只精品国产| 国产免费无码一区二区视频| 欧美日韩亚洲另类| av资源网站在线观看| 国产99久久精品一区二区 夜夜躁日日躁 | 国产精品裸体瑜伽视频| 国产91在线看| 久久久久人妻一区精品色欧美| 5858s免费视频成人| yiren22亚洲综合伊人22| 97精品久久久| 免费观看成人www动漫视频| 99热这里只有精品免费| 国内成人免费视频| 欧美日韩黄色网| 91精品国产欧美一区二区成人| 免费成人黄色| 成人欧美一区二区三区在线湿哒哒| 久久激情电影| 污污的视频免费| 中文字幕第一区| 精品国产一区二区三区四| 亚洲男人的天堂在线播放| gogo久久| 精品亚洲欧美日韩| 石原莉奈一区二区三区在线观看| 久久精品—区二区三区舞蹈| 色先锋aa成人| 色开心亚洲综合| 国产精品区二区三区日本| 久久久人人人| 九九热视频在线免费观看| 欧美精品一区二区高清在线观看| 小早川怜子影音先锋在线观看| 亚洲韩国在线| 成人av资源网站| 少妇久久久久久久久久| 欧美人牲a欧美精品| 波多野结衣久久| 亚洲成人自拍| 成人性生交大合| 久久久999久久久| 欧美美最猛性xxxxxx| 粉嫩一区二区三区在线观看| 男人添女人下部视频免费| 久久女同精品一区二区| 99视频免费看| 国产成人精品免费视频| 欧美三级不卡| 成年人看的免费视频| 精品国产一区二区三区不卡| 蜜桃精品在线| 日本黄大片在线观看| 欧美激情一区二区三区在线| 亚洲乱色熟女一区二区三区| 国产不卡一区二区在线播放| 亚洲一级黄色| 99热在线观看精品| 国产丝袜一区二区三区免费视频|