使用XML作为数据库

如何使用XML作为小型数据库?
首先,我们以下面的user.xml作为我们所要使用的xml文件,具体内容如下:


我们要做的是对这个xml文件进行增删改操作:
共有六个类:
Computer.java  系统开始
Add.java   往xml添加一个用户的类的具体操作
Delete.java   从xml中删除一个用户的具体操作
Query.java    从xml中查询一个用户的具体操作
Update.java   更新用户的信息
User.java    这是一个用户类,即一个xml中用户的具体类,此处用到了java的对象思想,把一个数据对象作为一个User,从而对这个User进行操作。


user.xml文件是放在F盘目录下哈;更改后是在F盘目录下产生出users.xml
在我们实际的开发、作为数据库的时候,读取得文件名就是我们产生的文件名,是在同一个文件下进行更改

import java.util.Scanner;
import MySql.DataBaseConduct;

public class Computer {
	public Computer(){
		//开始整个系统,判断用户使用的是哪种数据库
		System.out.println("数据库选择");
		System.out.println("输入1为使用xml数据库");
		System.out.println("输入2为使用mySql数据库");
		Scanner scan = new Scanner(System.in);
		int choice;
		while(true){
			try{ //如果用户输入的数值不是1或者2,则出错
			choice = scan.nextInt();
			if(choice!=1&&choice!=2){
				System.out.println("输入错误!请重新输入");
			}else{
				//如果输入的正确,则启动!
				//如果输入的是1,则启用XML作为数据库,否则,启用MySql作为数据库
				if(choice==1){
					this.startXML();
				}else{
					this.startMySql();
				}
				break;
			}
			}catch(Exception e){
				System.out.println("输入错误!请重新输入");
			}
		}
	}
	
	public void startXML(){
		System.out.println("欢迎使用该系统!");
		Scanner scan = new Scanner(System.in);
		int num = 0;
		while(true){
			System.out.println("请输入要执行的操作!");
			System.out.println("1:查询用户");
			System.out.println("2:增加用户");
			System.out.println("3:修改用户");
			System.out.println("4:删除用户信息");
			try{
				num = scan.nextInt();
				if(num<1||num>4){
					System.out.println("输入错误!请重新输入");
					continue;
				}
			}catch(Exception e){
				System.out.println("输入错误!");
			}
			switch(num){
				case(1):Query.getQuery();continue;//查询用户操作
				case(2):Add.add();continue;//添加用户操作
				case(3):Update.update();continue;//更新用户操作
				case(4):Delete.delete();continue;//删除用户操作
				default:System.out.println("输入错误!请重新输入!");continue;
			}
		}
	}
	
	public void startMySql(){
		DataBaseConduct mySql = new DataBaseConduct();
		mySql.choose();
	}
	
	public static void main(String[] args) {
		//启动系统
		Computer com = new Computer();
	}
}

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Add {
	public static void add(){
		while(true){
			try{
				//new出一个User,调用user.createUser()方法来填写这个用户的各种信息
				User user = new User();
				System.out.println("0");
				user.createUser();
				//调用添加用户,将user作为参数传递
				Add.addUser(user);
				break;
			}catch(Exception e){
				System.out.println("输入错误!请重新输入!");
			}
		}
	}
	
	public static void addUser(User user){
		try{
		  //读取文件
		  SAXReader saxReader = new SAXReader();
		  Document doc = saxReader.read(new File("F://user.xml"));
		  //得到跟结点root
		  Element root = doc.getRootElement();
		  //往根节点添加user元素
		  Element User = root.addElement("user");
		  //设置user的userID
		  User.addAttribute("userID", user.getUserID());
		  //往user添加各种子元素和设置值
		  Element UserName = User.addElement("UserName");
		  UserName.setText(user.getUserName());
		  Element DeptId = User.addElement("DeptId");
		  DeptId.setText(user.getDeptId());
		  Element Sex = User.addElement("Sex");
		  Sex.setText(user.getSex());
		  Element IconId = User.addElement("IconId");
		  IconId.setText(user.getIconId());
		  Element City = User.addElement("City");
		  City.setText(user.getCity());
		  Element Password = User.addElement("Password");
		  Password.setText(user.getPassword());
		  Element OnLineState = User.addElement("OnLineState");
		  OnLineState.setText(user.getOnLineState());
		  Element LastLoginTime = User.addElement("LastLoginTime");
		  LastLoginTime.setText(user.getLastLoginTime());
		  Element RegisterTime = User.addElement("RegisterTime");
		  RegisterTime.setText(user.getRegisterTime());
		  //添加元素结束后往新的文件重新写入doc数据
		  XMLWriter output = new XMLWriter(new FileWriter( new File("F://users.xml") ));
		  output.write(doc);
		  //关闭输出流
		  output.close();
		}catch(DocumentException e){
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
}

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Delete {
	
	public static void delete(){
		Scanner scan = new Scanner(System.in);
		String num = null;
		while(true){
			System.out.println("请输入要删除的用户ID号(5位)");
			try{
				num = scan.next();
				HashMap<String,String> map = Query.startQuery(num);
				Set set =  map.keySet();
				for(Iterator iter = set.iterator();iter.hasNext();){
					String key  = (String)iter.next();
					String value = map.get(key);
					System.out.println(key+":"+value);
				}
				//如果用户不存在,则不执行下面的操作,如果存在,则执行
				if(map.size()>1){
					Delete.toDelete(num);
				}
				break;
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	
	public static void toDelete(String num){
		SAXReader reader = new SAXReader();
		try {
			//得到user.xml的Document
			Document doc = reader.read(new File("F://user.xml"));
			//得到跟结点
			Element root = doc.getRootElement();
			//得到根节点下的所有user集合
			List<Element> userList = doc.selectNodes("//TUser/user");
			//得到迭代器
			Iterator<Element> iter = userList.iterator();
			while(iter.hasNext()){
				//得到user元素
				Element e = iter.next();
				//得到这个user元素的userID
				Attribute att = e.attribute("userID");
				//判断这个userID是不是我们想要的user
				if(num.equals(att.getText())){
				//如果是,则把自己(e)从跟结点处删除
				root.remove(e);
				}
			}
			//得到XML的输出流
			XMLWriter output;
			try {
				output = new XMLWriter(new FileWriter( new File("F://users.xml") ));
				//将内存中的doc写入到新文件当中
				output.write(doc);
				//关闭输出流
				output.close();
				System.out.println("该用户已被删除!");
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Query {
	
	public static void getQuery(){
		//定义输入
		Scanner scan = new Scanner(System.in);
		String num = null;
		while(true){
		System.out.println("请输入要查询的用户ID号(5位)");
		try{
		//得到要查询的用户ID
		num = scan.next();
		//定义一个HashMap,用于输出这个用户的所有信息
		HashMap<String,String> map = startQuery(num);
		Set set =  map.keySet();
		for(Iterator iter = set.iterator();iter.hasNext();){
		String key  = (String)iter.next();
		String value = map.get(key);
		System.out.println(key+":"+value);
		}
		
		break;
		}catch(Exception e){
		System.out.println("输入错误!请重新输入!");
		}
		}
	}
	
	public static HashMap<String,String> startQuery(String num){
		//定义一个reader和HashMap,HashMap是用来返回我们要查询的这个用户的信息的
		SAXReader reader = new SAXReader();
		HashMap<String,String> map = new HashMap<String,String>();
		try {
			//得到user.xml的这个doc
			Document doc = reader.read(new File("F://user.xml"));
			//得到所有用户的一个集合userList
			List<Element> userList = doc.selectNodes("//TUser/user");
			//得到迭代器,
			Iterator<Element> iter = userList.iterator();
			while(iter.hasNext()){
				//得到每一个user元素,进行判断
				Element e = iter.next();
				//得到这个user的ID
				Attribute att = e.attribute("userID");
				//如果这个user的ID和我们查询的ID一致,则将其所有的信息放入到map当中
				if(num.equals(att.getText())){
					//得到这个user的所有子元素
					List<Element> childElements = e.elements();
					//得到所有子元素的迭代器
					Iterator<Element> childIter = childElements.iterator();
					//如果还有子元素,则
					while(childIter.hasNext()){
						//得到子元素,将其信息放入到map当中
						Element childElement = childIter.next();
						map.put(childElement.getQName().getName(), childElement.getText());
					}
				}
			}
		}catch(Exception e){
			System.out.println("读取城市失败!");
			e.printStackTrace();
		}
		//如果map为0,则说明没有查找到我们要的信息,则往map当中添加未找到信息
		if(map.size()<1){
			map.put("您查找的信息不存在", "");
		}
		return map;
	}
}

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Update {
	
	public static void update(){
		//定义输入字符串,即num(我们要修改的id名称),要修改的元素,和元素的值
		Scanner scan = new Scanner(System.in);
		String num = null;
		Scanner scan1 = new Scanner(System.in);
		String element = null;
		Scanner scan2 = new Scanner(System.in);
		String elementValue = null;
		while(true){
			System.out.println("请输入要修改的用户ID号(5位)");
			try{
				num = scan.next();
				//调用查询方法,将用户的各种信息显示出来
				HashMap<String,String> map = Query.startQuery(num);
				Set set =  map.keySet();
				for(Iterator iter = set.iterator();iter.hasNext();){
					String key  = (String)iter.next();
					String value = map.get(key);
					System.out.println(key+":"+value);
				}
				//如果用户不存在,则不执行下面的操作,如果存在,则执行
				if(map.size()>1){
					System.out.println("请输入你要修改的元素:");
					element = scan1.next();
					System.out.println("请输入你要修改元素的值:");
					elementValue = scan2.next();
					Update.updateUser(num,element, elementValue);
				}
				break;
			}catch(Exception e){
				System.out.println("输入错误!请重新输入!");
			}
		}
	}
	
	public static void updateUser(String num,String element,String value){
		try {
			//得到user.xml文件,将其读取到doc当中
			SAXReader reader = new SAXReader();
			Document doc = reader.read(new File("F://user.xml"));
			//得到跟结点root
			Element root = doc.getRootElement();
			//得到根节点TUser下的所有用户,将其存放到userList当中
			List<Element> userList = doc.selectNodes("//TUser/user");
			//得到可以访问所有用户的迭代器Iterator
			Iterator<Element> iter = userList.iterator();
			//如果迭代器还有下一个,则取出来
			while(iter.hasNext()){
				//得到迭代器中下一个元素
				Element user = iter.next();
				//得到user元素的一个属性,即userID,
				Attribute userId = user.attribute("userID");
				//判断这个user的属性值是否等于我们要修改的这个用户的ID,如果是,则取出来进行就该
				if(num.equals(userId.getText())){
					//通过user.element("子元素名")得到我们要修改的子元素
					Element childElement = user.element(element);
					//修改子元素的text值
					childElement.setText(value);
				}
			}
			//得到XML的输出流
			XMLWriter output;
			try {
				output = new XMLWriter(new FileWriter( new File("F://users.xml") ));
				//将内存中的doc写入到新文件当中
				output.write(doc);
				//关闭输出流
				output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}

import java.util.Date;
import java.util.Scanner;

public class User {

	private String userID;
	private String UserName;
	private String DeptId;
	private String Sex;
	private String IconId;
	private String City;
	private String Password;
	private String OnLineState;
	private String LastLoginTime;
	private String RegisterTime;
	
	public String getUserID() {
		return userID;
	}
	public void setUserID(String userID) {
		this.userID = userID;
	}
	public String getUserName() {
		return UserName;
	}
	public void setUserName(String userName) {
		UserName = userName;
	}
	public String getDeptId() {
		return DeptId;
	}
	public void setDeptId(String deptId) {
		DeptId = deptId;
	}
	public String getSex() {
		return Sex;
	}
	public void setSex(String sex) {
		Sex = sex;
	}
	public String getIconId() {
		return IconId;
	}
	public void setIconId(String iconId) {
		IconId = iconId;
	}
	public String getCity() {
		return City;
	}
	public void setCity(String city) {
		City = city;
	}
	public String getPassword() {
		return Password;
	}
	public void setPassword(String password) {
		Password = password;
	}
	public String getOnLineState() {
		return OnLineState;
	}
	public void setOnLineState(String onLineState) {
		OnLineState = onLineState;
	}
	public String getLastLoginTime() {
		return LastLoginTime;
	}
	public void setLastLoginTime(String lastLoginTime) {
		LastLoginTime = lastLoginTime;
	}
	public String getRegisterTime() {
		return RegisterTime;
	}
	public void setRegisterTime(String registerTime) {
		RegisterTime = registerTime;
	}
	public void createUser(){
		Scanner scan = new Scanner(System.in);
		String message = null;
		System.out.println("请输入userID");
		message = scan.next();
		this.setUserID(message);
		System.out.println("请输入UserName");
		message = scan.next();
		this.setUserName(message);
		System.out.println("请输入DeptId");
		message = scan.next();
		this.setDeptId(message);
		System.out.println("请输入Sex");
		message = scan.next();
		this.setSex(message);
		System.out.println("请输入IconId");
		message = scan.next();
		this.setIconId(message);
		System.out.println("请输入City");
		message = scan.next();
		this.setCity(message);
		System.out.println("请输入Password");
		message = scan.next();
		this.setPassword(message);
		System.out.println("请输入OnLineState");
		message = scan.next();
		this.setOnLineState(message);
		
		this.setLastLoginTime(new Date().toLocaleString());
		this.setRegisterTime(new Date().toLocaleString());  
	}
}

第一步:查询用户:

(在console中显示出用户的信息)

第二步:添加用户:
(似乎忘记添加用户名到xml中了,不过上面的代码是有的,我发现错误后就改了)


第三步:修改用户:

这是修改后的xml,City从福州变为德化

第四步:删除用户:

删除后xml文件中就没有该用户的信息了


来源:http://blog.sina.com.cn/s/blog_697b968901013hg7.html


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值