xml导入sql
分无所谓,如果是你要的看着给吧。不知道你了解多少,我就尽量详细点,罗嗦点。
表的设计完全是根据XML节点设计的,每一个节点信息都是表的一个字段,每一个节点的属性也要是一个表的字段。
如果是用java写首先需要导入几个包
import java.sql.*; //估计一般的项目都是外包连接数据库,所以用外包数据库来讲。
import java.io.*;
import javax.xml.parsers.*; //这个包是用来解析XML的
import org.w3c.dom.*; //工厂包
import org.apache.crimson.tree.*;//这个包是建立XML的包,也可以选择不用,一般IDE不自带,需要自己导入
//类也简单写一下吧
public class XmlToSql{
public static void main(string[] args){
//根据XML节点设计出的表字段,我先假设有3个字段
String id,username,password;
//建立数据库连接,简单方法连一下吧
Class.forName("com.microsoft.jabc.sqlserver.SQLServerDriver");
Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename="数据库名","登陆名","密码");
//建立了连接后要用工厂去获得Document,也就是你的XML
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//建立一个新工厂
DocumentBuilder builder=factory.newDocumentBuilder();//工厂建立一个builder来管理Doc
Document doc=builder.parse(new FileInputStrem(new File("*****.xml"));//把你的XML进行解析放入Document类型文档。这时候你的XML文档节点就以树的形式放入内存了(说白了就是你表的字段),下面你要什么就调用就行了。
//开始正式解析文档
NodeList nodes=doc.getElementsByTagName("a");//从英文也看的出这是把名为a的节点的信息放入NodeList容器中。NodeList就是存放节点组的容器
for(int i=0;i<nodes.getLength(),i++){ //开始循环把你的节点信息插入你的SQL表中,我只需要把你要的字段提取出来就行了。我们不是前面假定了一个属性ID,两个元素节点吗?这里就来取出
Element node=(Element)nodes.item(i); //先做个元素对象,毕竟我们要的字段都是元素节点
id=node.getAttributes().getNamedItem("id").getNodeValue(); //用这个方法取出XML中 属性ID的内容放入ID字段中,这个ID就是你SQL里的ID名了,最后插入就可以了。注意这里是提取属性的方法
username=node.getElementsBtagName("username").item(0).getFirstChild().getNode.Value();//提取元素节点username的值放入字段,.item(0)就是第一个这个字段,如果就有一个可以不要。
password=node.getElementsBtagName("password").item(0).getFirstChild().getNode.Value();//都是元素节点,所以同样的方法取出password的值
//好了我们要的3个表值都取到了,并放入了变量中。现在一个SQL语句插入表就行了,其实我很怕在JAVA中写SQL,不能格式化, .NET就方便的多。都写到这里了就写完吧
sql="insert into a values("+id+"','"+username+"'+'"password+"')";
con.createStatement().executeUpdate(sql);
}catch(Exception e{e.printStackTrace();}
}
}
//好了,你的XL信息循环插入表中了,其实XML结构很关键,这里是但节点循环,有时候出现多子节点,或者非正规体那就要根据XML的结构来循环输入了,不过大体方法和思路都是一样的。由于直接就在这里写的代码,没在IDE中写,所以括号匹配方面也许会出小问题,见谅
B. 将XML文件导入SQL
首先将XML拆解出来:
declare @变量名A XML
set @变量名A='XML内容COPY进来,如果有中文的话,在单引号前加 N '
declare @变量名B int
exec sp_xml_preparedocument @变量名B output,@变量名A
接下来就是把XML数据形成表在SQL里面显示出来= =:
举个例子,
XML内容是:
<ROOT>
<Customer CustomerID="C01" Name="Samsung">
<Order OrderID="O01" Qty="1000">
<OrderDate>1998-1-1</OrderDate>
<Description>100 missing</Description>
</Order>
<Order OrderID="O02" Qty="200">
<OrderDate>2000-1-1</OrderDate>
<Description>10 smaller than specified size</Description>
</Order>
</Customer>
<Customer CustomerID="C02" Name="Nokia">
<Order OrderID="O03" Qty="500">
<OrderDate>2000-1-1</OrderDate>
<Description>Perfect this time</Description>
</Order>
<Order OrderID="O04" Qty="100"></Order>
</Customer>
</ROOT>
那么你的代码就应该这么打:
select*from
openxml(@变量名B,'/ROOT/Customer/Order',1)
with
(
订单编号 char(3) '@OrderID',
数量 int '@Qty',
订单日期 date 'OrderDate',
描述 varchar(30) 'Description'
)
with后面是表里的内容,想要什么就就打什么,单引号内是你引用的东西。
最后释放内存:
exec sp_xml_removedocument @变量名B
呃。。不懂再问把,
C. 怎样把.xml的数据导入到SQL Server 2008中
bcp
bulk insert
都可以
bcp 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导入数据文件。
语法举例:
bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -f Currency.xml
程序里面最好用这个。如果手动,管理器中导入就可以,用.net程序也可以,xml可以作为一个数据源操作。