如何使用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());  
}
}

第一步:查询用户:


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


大家可以查看在users.xml后添加的新元素

第三步:修改用户:

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

第四步:删除用户:

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

如何使用XML作为小型数据库相关推荐

  1. 用xml充当小型数据库案例

    利用dom4j工具,将user.xml作为一个小型的数据库,然后控制台输入进行用户名与密码的匹配 /*user.xml文件放在src下*/ <?xml version="1.0&quo ...

  2. 汽车管理案例(使用XML作为小型数据库)

    问题:汽车具有颜色.型号.品牌.售价四个属性.实现CRUD,其中查询时支持模糊查询.比如:[一汽大众] 我输入大众也可以查到. 主要有四步: 1.创建汽车对象,封装数据. 2.创建xml表,作为数据库 ...

  3. 模仿mongodb采用xml+json实现小型数据库

    mini-mongodb 模仿mongodb采用Xml+json实现小型数据库;1.实现数据库创建2.表的创建3.表数据的增.删.改.查供大家参考学习使用,有助于更好的了解MongoDB的实现原理! ...

  4. 实现一个小型数据库--记一次中级软件设计实作浮沉历程

    说在前头:本篇文章主要是记录这次项目的过程,不全是贴代码,具体的程序移步这里,不喜欢的同学请轻喷. 事件起因:大三狗一枚,专业是软件应用.这学期的中级软件设计实作题目是实现一个小型的数据库,具体的题目 ...

  5. boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序

    boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序 C++实 ...

  6. boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST

    boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型 ...

  7. 小型数据库_如果您从事“小型科学”工作,那么您是否正在利用数据存储库?

    小型数据库 If you're a scientist, especially one performing a lot of your research alone, you probably ha ...

  8. 如何使用mysql数据库做网站_php小型数据库(不用mysql做网站)

    php教程小型数据库教程(不用mysql教程做网站) include 'pdbm.php'; $timestart = explode(' ', microtime()); $timestart = ...

  9. 如何通过RamDisk的方法加速小型数据库的访问速度

    应用功能: 数据库中存在大量数据时候,我们的程序启动则比较慢,因此启动从ramdisk中读取数据库可以提高速度. RamDisk简介 本文首先介绍了 如何在rh6.0系统上创建一个RamDisk,然后 ...

最新文章

  1. Waymo自动驾驶汽车扎堆冲进死胡同,一天多达50辆,附近居民蚌埠住了
  2. mysql 10进制转2进制_Oracle 10进制转换2进制
  3. 八十、 Springboot整合异步任务和定时任务
  4. C++ 字符串编程训练2
  5. 让Team Foundation Server/TFS自动记住用户名密码解决方案
  6. MySQL优化(2)--------常用优化
  7. 20200927:Java和Cpp中栈与队列的区别
  8. jQuery焦点图插件
  9. 4.Linux性能诊断 --- Linux工作流程内存管理
  10. Mac配置allure环境变量
  11. 自建cdn搭建_在自己的服务器上搭建CDN加速服务的教程
  12. 系统工程原理——指标权重的确定方法
  13. 《老路用得上的商学课21—25》消费心理学(二)
  14. .Net大局观(2).NET Core 2.0 特性介绍和使用指南
  15. numeric_limits
  16. RCA清洗系统及清洗液自适应预测温度控制
  17. ANSI编码文件批量转换为UTF-8编码小tips
  18. 淘宝开放平台的认证授权机制
  19. 没事别惹程序员,他们可是能毁灭地球的生物
  20. 2018——颓废的一年,勿忘初心。

热门文章

  1. 【MATLAB】矩阵操作 ( 矩阵下标 | 矩阵下标排列规则 )
  2. Android Studio开发配置NDK环境
  3. HTML和JavaScript代码分离、平稳退化(1)
  4. Win7无法远程桌面
  5. 洛谷 P1318 积水面积
  6. 简单多边形与圆交面积模板
  7. winform(MDI窗体容器、权限设置)
  8. ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证
  9. Webfrom --图片验证码
  10. 类WebOS(添加了主界面,及相关功能代码)