‘壹’ oracle怎么把数据库中的字段转化成指定的xml格式
在oracle中提供了许多内置的程序包,它们用于扩展数据库的功能。在开发应用程序时,可以利用这些程序包。数据库用户sys拥有oracle提供的所有程序包。他们被定义为共有同义词,并将执行权限授予了public用户组,任何用户都可以访问它们。其中DBMS_XMLQUERY包用于将查询结果喊激世转换为XML格式,DBMS_LOB程序包包含雨处理大型对象的过程和函数。下面我们看一下DBMS_XMLQUERY和DBMS_LOB的用法:
sql> DECLARE
result CLOB;
xmlstr VARCHAR2(32767);
line VARCHAR2(2000);
line_no INTEGER :=1;
BEGIN
result :=DBMS_XMLQUERY.getXml('select empno,empname from employee');
xmlstr :=DBMS_LOB.SUBSTR(result,32767);
LOOP
EXIT WHEN xmlstr IS NULL;
line :=SUBSTR(xmlstr,1,INSTR(xmlstr,CHR(10)-1));
DBMS_OUTPUT.PUT_LINE(line_no || ':' || line);
xmlstr :=SUBSTR(xmlstr,INSTR(xmlstr,CHR(10)+1));
line_no :=line_no + 1;
END LOOP;
END;
在上面的例子中我们声明了一个CLOB数据类型的result变量,以及VARCHAR2类型的xmlstr和line两个变量。其中,getXml函数用于将查询结果转换为XML格式,SUBSTR函数检索子字符串,铅巧32767值指定要从CLOB数据类型读取的最大字节数。检索到的字符串存储xmlstr变量中。LOOP块循环执行,每次从xmlstr中读取一行。INSTR函数返回一个郑肢字符串在另一个字符串首次出现的位置。在此,该函数返回换行符在字符串中的位置,直到遇到下一行。
大家觉得例子的结果能不能读出我们预期的结果呢?试试就知道了!!!
结果如下:
< ?xml version='1.0'?>
< ROWSET>
< ROW num="1">
< EMPNO>E001</EMPNO>
< EMPNAME>Jane</EMPNAME>
< /ROW>
<ROW num="2">
< EMPNO>E002</EMPNO>
< EMPNAME>John</EMPNAME>
< /ROW>
< ROW num="3">
< EMPNO>E003</EMPNO>
< EMPNAME>Joe</EMPNAME>
< /ROW>
< /ROWSET>
‘贰’ oracle数据库中怎么把xml文档内的数据导入啊
学习Oracle架构应当掌握的知识 1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件组成)一个数据库中的数据存储在磁盘上物理文件,被使用时,调入内存。其中控制文件、数据文件、重做日志文件、跟踪文件及警告日志(trace files,alert files)属于数据库文件;参数文件(parameter file)口令文件(password file)是非指败握数据库文件唯庆1.1数据文件:存储数据的文件.数据文件典型地代表了根据他们使用的磁盘空间和数量所决定的一个Oracle数据库的容积。由于性能原因,每一种类型的数据放在相应的一个枯帆或一系列文件中,将这些文件放在不同的磁盘中。```` http://www.huohuli.com/shi/content.aspx?ID=5264
‘叁’ oracle数据库如何解析XML数据获取值
实现思路:可虚简以通过w3c的dom解析器进行操作,之后通过getName获取到xmltpye中的属性值。
举例:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DomTest1
{
public static void main(String[] args) throws Exception
{
// step 1: 获得dom解析器工厂(工作败正的作用是用于创建具体的解析器)
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// System.out.println("class name: " + dbf.getClass().getName());
// step 2:获得具体的dom解析器
DocumentBuilder db = dbf.newDocumentBuilder();
// System.out.println("class name: " + db.getClass().getName());
// step3: 解析一个xml文档,获得Document对象(根结点)
Document document = db.parse(new File("candidate.xml"));
NodeList list = document.getElementsByTagName("PERSON");
for(int i = 0; i < list.getLength(); i++)
{
Element element = (Element)list.item(i);
String content = element.getElementsByTagName("NAME"察誉悔).item(0).getFirstChild().getNodeValue();
System.out.println("name:" + content);
System.out.println("--------------------------------------");
}
}
}
‘肆’ java读取oracle数据库里面的数据生成xml文件,生成的xml文件出现乱码怎么解决
跟踪问题所在:
1、查询一下数据库,判断在数据库中的时候,是否是已经存在了乱码。
2、在读取到Java的时候,你用SystemOut输出一下,判断这个时候,是否是乱码。
3、写入到xml文件的时候,XML中是否是乱码。
如果是1种情况出现乱码,则是写入数据库的时候出现乱码,需要更改写入程序的代码。
如果是2种情况出现乱码,则是读取Oracle的字符集出现错误,设置读取的字符集。
如果是3种情况出现乱码,则是在Java类中写入的时候,设置字符集,查看数据库字符集,设置为UTF-8、或者是GBK字符集。
希望对你有帮助。
‘伍’ XML数据文件怎么导入到Oracle数据库中
1.准备数据:在excel中构造出需要的数据
2.将excel中的数据另存为文本文件(有制表符分隔的)
3.将新保存到文本文件中的数据导入到pl*sql中
在pl*sql中选择tools--text importer,在出现的窗口中选择Data from Textfile,然后再选择Open data file,
在弹出的文件选择框中选中保存有数据的文本文件,此时将会看到data from textfile中显示将要导入的数据!
‘陆’ 使用SSH框架的Hibernate,怎么配置hbm.xml文件和连接oracle数据库
spring链接配置即可。
‘柒’ 数据库的类型
数据库大致可以这么分类:
1关系数据库
1.1大型商业数据库:支持数据存储量大,访问效率高,适合大型企业应用,收费较高,具体包括:
oracle
db2(ibm)
sybase(这个是比较早的,公司现在不做数据库了)
sql
server,版本包括2000,2005,2008,
2012等
1.2
中小型应用数据库:
sql
server
2000
acess
visual
foxpro
1.3
中小型开源数据库:
mysql(这个开源数据库在一些大型应用中会以集群的方式使用)
postgresql
sqlite
1.4嵌入式数据库:
sqlite也可以算在这里
1.5
列存储模式数据库:主要用于研究和数据仓库应用
monetdb
2
面向对象数据库
berkeley
db(现在已经被oracle买下了)
oracle也提供了面向对象的功能
3
xml数据库,这类数据库一般是附属于关系数据库功能的,只有研究型的是处理纯xml文档的
db2
,附加xml处理版本
oracle,里面包含xml查询功能
sqlserver,包含xml数据查询功能
4
nosql数据库,目前大型互联网公司和微博等网站广泛使用的数据存储系统,典型的有:
hbase
cassandar
mongodb
还有很多,这里不逐一列列举了
‘捌’ 请问C#如何实现Oracle数据库中指定表格数据以XML文件形式导出。
假设你的窗体上有一个按钮,在设计器中双击按钮,写以下代码:using
(OracleDataAdapter
=
new
OracleDataAdapter
("select
*
from
表","你的连接字符串")){DataTable
dt
=
new
DataTable("表名");adapter.Fill(dt);dt.WriteXml("C:\\xxx.xml");
//导出到C盘}不过Oracle不用SqlDataAdapter——1)右键你的程序“Add
References……”(灰色文件夹),然后添加System.Data.OracleClient。2)在程序中引入“using
System.Data.OracleClient”。3)编码如下:
‘玖’ 如何使用sqlloader导入xml文件到Oracle数据库
在Oracle表数据和xml文件间相互导入导出的PL/SQL过程
学校里要求做个题,题目要求是写出将已知格式xml文件中的数据导入Oracle数据库、把数据库中的数据导出成xml文件的过程。
已知格式xml文件如下:
<?xmlversion="1.0"?>
<PEOPLE>
<PERSONPERSONID="E01">
<NAME>TonyBlair</NAME>
<ADDRESS>10DowningStreet,London,UK</ADDRESS>
<TEL>(061)98765</TEL><FAX>(061)98768</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E02">
<NAME>BillClinton</NAME>
<ADDRESS>WhiteHouse,USA</ADDRESS>
<TEL>(001)640098765</TEL><FAX>(001)640098769</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E03">
<NAME>TomCruise</NAME>
<ADDRESS>57JumboStreet,NewYork,USA</ADDRESS>
<TEL>(001)450067859</TEL><FAX>(001)450067895</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E04">
<NAME>LindaGoodman</NAME>
<ADDRESS>78CraxLane,London,UK</ADDRESS>
<TEL>(061)5456789</TEL><FAX>(061)5456772</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
</PEOPLE>
于是写出过程如下:
--建表
CREATETABLEPEOPLE
(
PERSONIDVARCHAR2(10)PRIMARYKEY,
NAMEVARCHAR2(20),
ADDRESSVARCHAR2(60),
TELVARCHAR2(20),
FAXVARCHAR2(20),
EMAILVARCHAR2(40)
);
--从xml文件载入数据保存到数据库的过程
createorreplaceprocerexml2db(xmlfilevarchar2)as
pxmlparser.Parser;
docxmldom.DOMDocument;
nxmldom.DOMNode;
nlxmldom.DOMNodeList;
lennumber;
--根据PERSON结点生成插入SQL语句的过程
functioninsertsql(nodexmldom.DOMNode)returnvarchar2
is
nxmldom.DOMNode;
nlxmldom.DOMNodeList;
lennumber;
nnmxmldom.DOMNamedNodeMap;
isqlvarchar2(200);
begin
--取得PERSON结点所有属性
nnm:=xmldom.getAttributes(node);
isql:='insertintopeoplevalues(';
isql:=isql||'''';
--取得所有属性中的第一个属性,即"PERSONID",并拼接到SQL语句中
isql:=isql||xmldom.getNodeValue(xmldom.item(nnm,0));
isql:=isql||'''';
--取得PERSON结点下的所有结点,准备遍历
nl:=xmldom.getChildNodes(node);
len:=xmldom.getLength(nl);
foriin0..len-1loop
--取出第i个结点
n:=xmldom.item(nl,i);
isql:=isql||',';
isql:=isql||'''';
--将结点的文本值取出并拼接到SQL语句中
isql:=isql||xmldom.getNodeValue(xmldom.getFirstChild(n));
isql:=isql||'''';
endloop;
isql:=isql||')';
returnisql;
endinsertsql;
begin
p:=xmlparser.newParser;
xmlparser.parse(p,xmlfile);
--转换xml文件成DOM对像
doc:=xmlparser.getDocument(p);
xmlparser.freeParser(p);
--取出所有PERSON元素
nl:=xmldom.getElementsByTagName(doc,'PERSON');
len:=xmldom.getLength(nl);
--清空people表的内容
deletefrompeople;
foriin0..len-1loop
--取出第i个PERSON元素
n:=xmldom.item(nl,i);
--执行插入该PERSON元素所用的SQL语句
executeimmediateinsertsql(n);
endloop;
commit;
xmldom.freeDocument(doc);
endxml2db;
/
--将数据库中的数据导出成xml文件的过程
createorreplaceproceredb2xml(xmlfilevarchar2)as
docxmldom.DOMDocument;
retxmldom.DOMNode;
peoplenodexmldom.DOMNode;
--遍历整个people表的游标
-------------
--将people表中一行记录转换为元素
--并插入到DOM文档对像根结点PEOPLE下的过程
procereaddperson(docxmldom.DOMDocument,peoplexmldom.DOMNode,
v_pidvarchar2,v_namevarchar2,v_addrvarchar2,
v_telvarchar2,v_faxvarchar2,v_emailvarchar2)
is
personelemxmldom.DOMElement;
personnodexmldom.DOMNode;
itemelemxmldom.DOMElement;
itemnodexmldom.DOMNode;
textxmldom.DOMText;
begin
--创建PERSON结点
personelem:=xmldom.createElement(doc,'PERSON');
--设置PERSONID属性
xmldom.setAttribute(personelem,'PERSONID',v_pid);
personnode:=xmldom.appendChild(peoplenode,xmldom.makeNode(personelem));
--向PERSON结点中添加NAME元素
itemelem:=xmldom.createElement(doc,'NAME');
--将NAME结点添加到PERSON结点中
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
--创建文本结点
text:=xmldom.createTextNode(doc,v_name);
--将文本结点添加到NAME结点下,以构成完整NAME元素
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加ADDRESS元素
itemelem:=xmldom.createElement(doc,'ADDRESS');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_addr);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加TEL元素
itemelem:=xmldom.createElement(doc,'TEL');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_tel);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加FAX元素
itemelem:=xmldom.createElement(doc,'FAX');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_fax);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加EMAIL元素
itemelem:=xmldom.createElement(doc,'EMAIL');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_email);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
endaddperson;
begin
--创建一个新DOM文档对像
doc:=xmldom.newDOMDocument;
--为文档添加根结点PEOPLE
peoplenode:=xmldom.makeNode(xmldom.createElement(doc,'PEOPLE'));
ret:=xmldom.appendChild(xmldom.makeNode(doc),peoplenode);
--使用游标遍历people中的每行,生成每一行对应的PERSON元素并添加到PEOPLE根结点中
forv_rowincur_peopleloop
addperson(doc,peoplenode,v_row.personid,v_row.name,
v_row.address,v_row.tel,v_row.fax,v_row.email);
endloop;
--将结果写入指定文件
xmldom.writeToFile(doc,xmlfile);
xmldom.freeDocument(doc);
enddb2xml;
‘拾’ 从oracle数据库查询数据生成xml,java解析xml文件的数据批量插入到oracle数据库(用SAX解析)
我自己前段时间写的有事就问
数据库建了一个表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("有错啊!");
}
}
}