热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用XML作为数据库

如何使用XML作为小型数据库?首先,我们以下面的user.xml作为我们所要使用的xml文件,具体内容如下:我们要做的是对这个xml文件进行增删改操作:共有六个类:Computer.java系统开

如何使用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 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 userList = doc.selectNodes("//TUser/user");
//得到迭代器
Iterator 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 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 startQuery(String num){
//定义一个reader和HashMap,HashMap是用来返回我们要查询的这个用户的信息的
SAXReader reader = new SAXReader();
HashMap map = new HashMap();
try {
//得到user.xml的这个doc
Document doc = reader.read(new File("F://user.xml"));
//得到所有用户的一个集合userList
List userList = doc.selectNodes("//TUser/user");
//得到迭代器,
Iterator 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 childElements = e.elements();
//得到所有子元素的迭代器
Iterator 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 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 userList = doc.selectNodes("//TUser/user");
//得到可以访问所有用户的迭代器Iterator
Iterator 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



推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
author-avatar
1986欠我一个拥抱_567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有