问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

从oracle数据库查询数据生成xml,java解析xml文件的数据批量插入到oracle数据库(用SAX解析)

发布网友 发布时间:2022-04-10 13:14

我来回答

1个回答

热心网友 时间:2022-04-10 14:44

我自己前段时间写的有事就问
数据库建了一个表study
id student class teacher age 这5个字段
package com.sql.xml;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
//导出数据存入XML
public class ReadDb {
public static void main(String args[]){
//连接数据库
try{
//数据库连接
String url="jdbc:oracle:thin:@10.0.3.18:1521:hxtest18";
String classforname="oracle.jdbc.driver.OracleDriver";
String usename="yong";
String password="password";
Class.forName(classforname);
Connection con=DriverManager.getConnection(url,usename,password);
Statement sta=con.createStatement();
//查询数据
ResultSet result=sta.executeQuery(
"SELECT * FROM study");
//创建根节点
Document document=DocumentHelper.createDocument();
Element studyInfo=DocumentHelper.createElement("studyInfo");
document.setRootElement(studyInfo);
//Element studyInfo=document.addElement("studyInfo");
//当有值时查询
while(result.next()){
//增加每个节点
Element study=studyInfo.addElement("study");
Element id=study.addElement("id");
Element student=study.addElement("student");
Element classe=study.addElement("class");
Element teacher=study.addElement("teacher");
Element age=study.addElement("age");
//将数据库值通过SETTEXT为XML值
id.setText(result.getString("id"));
student.setText(result.getString("student"));
//System.out.println(id.getText());
classe.setText(result.getString("class"));
teacher.setText(result.getString("teacher"));
age.setText(result.getString("age"));
}
//将树导出到文件中:两种输出方法
XMLWriter write=new XMLWriter(new FileOutputStream(new File("studyInfo.xml")));
write.write(document);
write.close();

}catch(Exception e){
e.printStackTrace();
}
}

}

插入数据库,改了几个条件
bookstore.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book has="100">
<bname>数据库</bname>
<price>33.80元</price>
<date>2009-10-1</date>
</book>
<book has="95">
<bname>三国演义</bname>
<price>40.00元</price>
<date>2005-1-7</date>
</book>
<book has="86">
<bname>西游记</bname>
<price>30.00元</price>
<date>2004-3-8</date>
</book>
<cd have="15">
<id>1</id>
<cname>beyound</cname>
<owner>小黎</owner>
</cd>
<cd have="17">
<id>2</id>
<cname>kugou</cname>
<owner>小强</owner>
</cd>
</bookstore>

解析如下
package com.sql.xml;
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.OutputFormat;

//XML的解析与转换后存入数据库
public class Fenkai {
public static void main(String args[]){
String sql,BNAME=null,PRICE=null,DAT=null;//定义数据库表段
String sqlatt,CNAME=null,ID=null,OWNER=null;
//读取xml文件
SAXReader reader=new SAXReader();
File file=new File("bookstore.xml");
try{
//数据库连接
String url="jdbc:oracle:thin:@10.0.3.18:1521:hxtest18";
String classforname="oracle.jdbc.driver.OracleDriver";
String usename="yong";
String password="password";
Class.forName(classforname);
Connection con=DriverManager.getConnection(url,usename,password);
//解析xml文件
Document document=reader.read(file);
Element root=document.getRootElement();//根节点
System.out.println("输出根节点:"+root.getName());
//下面用迭代得到子节点和孙节点
for(Iterator child=root.elementIterator();child.hasNext();){
Element childEle=(Element)child.next();
System.out.println("子:"+childEle.getName());
System.out.println("孙:");
for(Iterator grand=childEle.elementIterator();grand.hasNext();){
Element grandEle=(Element)grand.next();
System.out.println(grandEle.getName()+"值:"+grandEle.getText());
//转换数据
while(grandEle.getText().equals("数据库")){
grandEle.setText("001");
}
while(grandEle.getText().equals("三国演义")){
grandEle.setText("002");
}
while(grandEle.getText().equals("西游记")){
grandEle.setText("003");
}
while(grandEle.getText().equals("beyound")){
grandEle.setText("004");
}
while(grandEle.getText().equals("kugou")){
grandEle.setText("005");
}

}}
//得到各节点值插入数据库

for(Iterator it= root.elementIterator("book");it.hasNext();){
Element ch=(Element)it.next();
BNAME=ch.elementText("bname");
PRICE=ch.elementText("price");
DAT=ch.elementText("date");

// while(childEle.getName().equals("cd")){}

sql="insert into book values('"+BNAME+"','" +PRICE
+"','"+DAT+"')";
//sql="select * from book";//加入本语句运行不改变数据表
//执行
con.createStatement().executeUpdate(sql);}
for(Iterator itt= root.elementIterator("cd");itt.hasNext();){
Element cht=(Element)itt.next();
CNAME=cht.elementText("cname");
ID=cht.elementText("id");
OWNER=cht.elementText("owner");
sqlatt="insert into cd values('"+CNAME+"','" +ID
+"','"+OWNER+"')";
//sqlatt="select * from cd";
con.createStatement().executeUpdate(sqlatt);}

//将转换后文件存入txt
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("gbk");
XMLWriter writer = new XMLWriter( new FileWriter(new File("bookchange.txt")),format);
writer.write(document);
writer.close();
System.out.println(document.asXML());//打印改变后的树
}catch(Exception e){
e.printStackTrace();
System.out.println("有错啊!");
}
}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
天水师范学院排名几本 现在那些银行有小额贷款,可以分期还的? 我想贷款一万,分期还款,不要什么抵押,请问在哪里可以贷?如果是私人帮办... 我想贷款一万块,但是我没有东西可抵押,银行能贷给我钱吗? 我想贷一万到两万块,然后分期还款,哪个银行做这样的小业务? 电气图纸中接线排怎么编号的 接线端子箱是什么?接线端子箱的定义 小米手环步数能同步微信吗? 我的小米手环的步行步数为什么不能在排行榜中显示出来? ...微信绑定后,突然没有排行榜和点赞提醒是怎么回事 谁知道这个怎么把设置里的显示锁屏的时间变长 Φ快捷键是什么? 俄罗斯盐有抗结剂吗? 俄罗斯白雪公主盐加碘吗 俄罗斯最高民族礼节是面包上撒盐送客人,什么含义? 俄罗斯向客人的面包上撒盐? 俄罗斯的盐里加碘吗? 欢迎客人时,俄罗斯的最高民族礼节为什么要撒盐在面包上? 无论如何 同义词 什么借钱软件靠谱啊~~~ 无论如何近义词 俄罗斯吃的是无碘盐吗 无论如何的近义词 中国人适合吃俄罗斯的食用盐吗 小时候,我无论对什么都不的拼音? 无论如何 近义词 俄罗斯食用盐的好处 无论的论怎么写 人一生中不可或缺的东西,面包和盐为何在俄罗斯如此重要? 为什么俄罗斯人要以在面包上撒盐,为最高礼仪? linux中在vi编辑器加#是什么意思 学linux时说要会用“文书编辑器”。是吗?是什么东西啊? 怎么把微信的链接跳转,换成UC浏览器 微信发的网站uc打不开 微信里打不开的文件我点了总是发送给朋友后才可以看怎么改过来用uc流览器打开看 新买的三星NOTE3,电信版的,微信朋友圈里面的链接打不开,但是用UC浏览器什么上网都正常,求解,谢啦 我的电脑怎么连接WiFi 我的电脑要连上wifi需要怎么操作 想连接我家wifi时需要我手机同意在手机上怎么办 我的wifi连不上为什么怎么连接 ae时间重映射往后拖视频没有画面 我要连接邻居的WiFi用什么软件好? 那么多软件,哪个app还信用卡贷款比较靠谱? 信用卡贷款哪个软件比较好呢 什么贷款软件只需要信用卡账单就可以借款 汽油里有水,发动机会出现什么现象? 汽车加了不好的油或油里有水该怎么办 油箱为什么会有水呢 摩托车油箱里有水怎么办? 为什么发动机机油里会有水?