关闭

如何使用XML作为小型数据库

246人阅读 评论(0) 收藏 举报
分类:
如何使用XML作为小型数据库?
首先,我们以下面的user.xml作为我们所要使用的xml文件,具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<TUser>
  <user userID="00001">
    <UserName>小杨</UserName>
    <DeptId>001</DeptId>
    <Sex>男</Sex>
    <IconId>11</IconId>
    <City>德化</City>
    <Password>123</Password>
    <OnlineState>0</OnlineState>
    <LastLoginTime>2012-05-09 16:22:40</LastLoginTime>
    <RegisterTime>2007-01-11 16:18:05</RegisterTime>
  </user>
  <user userID="00002">
    <UserName>小吴</UserName>
    <DeptId>002</DeptId>
    <Sex>男</Sex>
    <IconId>11</IconId>
    <City>福州</City>
    <Password>123</Password>
    <OnlineState>0</OnlineState>
    <LastLoginTime>2012-05-09 16:22:44</LastLoginTime>
    <RegisterTime>2007-01-11 16:18:21</RegisterTime>
  </user>
</TUser>


我们要做的是对这个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());  
}
}

第一步:查询用户:

如何使用XML作为小型数据库
(在console中显示出用户的信息)

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

如何使用XML作为小型数据库

如何使用XML作为小型数据库
大家可以查看在users.xml后添加的新元素


第三步:修改用户:

如何使用XML作为小型数据库

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

如何使用XML作为小型数据库


第四步:删除用户:

如何使用XML作为小型数据库

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

如何使用XML作为小型数据库
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:716371次
    • 积分:12925
    • 等级:
    • 排名:第1128名
    • 原创:288篇
    • 转载:1964篇
    • 译文:3篇
    • 评论:11条
    最新评论