做一个网站,把数据保存在xml文件中,跟把数据保存在数据库中,区别有多大?

做一个网站,把数据保存在xml文件中,跟把数据保存在数据库中,区别有多大?,第1张

实话实说,个人接触到使用Xml文件方式来保存数据的场景少之又少。除去求学期间根据课堂要求做静态网站时用于存储一些展示性数据,还有就是在WPF开发中保存一些常用但又不经常变化的离线数据。反而常使用Xml来做配置文件(例如SpringMvc、MyBatis和LogBack)网络数据传输和交互标准(例如WebService)、工作流设计(例如Activiti6)等情况较为常见。

Xml用于单设备数据存储的情况还说得过去,例如离线数据同步可以放在Xml数据文件中。在传统行业电商平台的规格,材质,产区等属性相对固定,Xml文件能很好胜任。再比如做一个内部使用的抽奖程序,将潜在用户群体以Xml方式保存也是不错的选择吧。所以Xml文件充当小型离线数据库还行。

而数据库的范围就比较宽泛,大致可以分为关系型数据库和非关系型数据库两大类。

关系型数据库以Oracle和MySql最为流行,学过编程的朋友应该耳熟能详,也是职场面试经久不衰的考察重点。

而NoSql算是后起之秀。在业务繁多复杂的当下,一些场景下关系型数据库应付起来相当吃力,有着更为复杂分类的非关系型数据库孕育而生。NoSql在搜索引擎(ElasticSearch)、键值(redis)、面向文档(Mongodb)和列存储(Hbase)等方面都能做到得心应手。这些就让其有着更强的业务针对性,相比传统关系型数据库有着质的提升。下面简单列举几个应用场景。

Redis可用于计数、分布式锁实现、单点登录、限流和缓存数据等;

在复杂页面的数据不便以表数据结构保存时,使用Mongodb整页存储方便又简单;

Elasticsearch就是以空间换时间典型代表,在做搜索引擎和日志记录(ELK)等方面有很大优势;

Hbase不必再像关系型数据库那样以行为存储单元,而是以列为基准,非常便于数据结构拓展。

当下流行徽服务和各种解耦,连关系型数据库都不再设计外键关系,非关系型数据库大行其道,Xml文件用来保存数据显然已经不合时宜,当然也不能否认关系型数据库的地位和Xml的作用。重要数据或某些行业的特殊性还是要以关系型数据库为根基,毕竟事务、稳定性、安全性和技术恢复支持等方面需要考虑的重点。

打开我们的IDEA的settings,配置如下信息 把SQL Dialect改成我们所用的数据库,

把我们写SQL的mapper.xml文件夹路径配置在Path中,保存。

创建一个接口

XmlInterface.java

?

public interface XmlInterface {

/**

* 建立XML文档

* @param fileName 文件全路径名称

*/

public void createXml(String fileName)

/**

* 解析XML文档

* @param fileName 文件全路径名称

*/

public void parserXml(String fileName)

}

接口实现

XmlImpl.java

?

package com.test.xml

import java.io.FileNotFoundException

import java.io.FileOutputStream

import java.io.IOException

import java.io.PrintWriter

import javax.xml.parsers.DocumentBuilder

import javax.xml.parsers.DocumentBuilderFactory

import javax.xml.parsers.ParserConfigurationException

import javax.xml.transform.OutputKeys

import javax.xml.transform.Transformer

import javax.xml.transform.TransformerConfigurationException

import javax.xml.transform.TransformerException

import javax.xml.transform.TransformerFactory

import javax.xml.transform.dom.DOMSource

import javax.xml.transform.stream.StreamResult

import org.w3c.dom.Document

import org.w3c.dom.Element

import org.w3c.dom.Node

import org.w3c.dom.NodeList

import org.xml.sax.SAXException

public class XmlImpl implements XmlInterface{

private Document document

public void init() {

try {

DocumentBuilderFactory factory = DocumentBuilderFactory

.newInstance()

DocumentBuilder builder = factory.newDocumentBuilder()

this.document = builder.newDocument()

} catch (ParserConfigurationException e) {

System.out.println(e.getMessage())

}

}

public void createXml(String fileName) {

Element root = this.document.createElement("scores")

this.document.appendChild(root)

Element employee = this.document.createElement("employee")

Element name = this.document.createElement("name")

name.appendChild(this.document.createTextNode("wangchenyang"))

employee.appendChild(name)

Element sex = this.document.createElement("sex")

sex.appendChild(this.document.createTextNode("m"))

employee.appendChild(sex)

Element age = this.document.createElement("age")

age.appendChild(this.document.createTextNode("26"))

employee.appendChild(age)

root.appendChild(employee)

TransformerFactory tf = TransformerFactory.newInstance()

try {

Transformer transformer = tf.newTransformer()

DOMSource source = new DOMSource(document)

transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312")

transformer.setOutputProperty(OutputKeys.INDENT, "yes")

PrintWriter pw = new PrintWriter(new FileOutputStream(fileName))

StreamResult result = new StreamResult(pw)

transformer.transform(source, result)

System.out.println("生成XML文件成功!")

} catch (TransformerConfigurationException e) {

System.out.println(e.getMessage())

} catch (IllegalArgumentException e) {

System.out.println(e.getMessage())

} catch (FileNotFoundException e) {

System.out.println(e.getMessage())

} catch (TransformerException e) {

System.out.println(e.getMessage())

}

}

public void parserXml(String fileName) {

try {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance()

DocumentBuilder db = dbf.newDocumentBuilder()

Document document = db.parse(fileName)

NodeList employees = document.getChildNodes()

for (int i = 0i <employees.getLength()i++) {

Node employee = employees.item(i)

NodeList employeeInfo = employee.getChildNodes()

for (int j = 0j <employeeInfo.getLength()j++) {

Node node = employeeInfo.item(j)

NodeList employeeMeta = node.getChildNodes()

for (int k = 0k <employeeMeta.getLength()k++) {

System.out.println(employeeMeta.item(k).getNodeName()

+ ":" + employeeMeta.item(k).getTextContent())

}

}

}

System.out.println("解析完毕")

} catch (FileNotFoundException e) {

System.out.println(e.getMessage())

} catch (ParserConfigurationException e) {

System.out.println(e.getMessage())

} catch (SAXException e) {

System.out.println(e.getMessage())

} catch (IOException e) {

System.out.println(e.getMessage())

}

}

}

测试

?

public class Main {

public static void main(String args[]){

XmlImpl dd=new XmlImpl()

String str="D:/grade.xml"

dd.init()

dd.createXml(str) //创建xml

dd.parserXml(str) //读取xml

}

}

结果

生成xml

<?xml version="1.0" encoding="GB2312"?><scores><employee><name>wangchenyang</name><sex>m</sex><age>26</age></employee></scores>复制代码


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11898442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存