`

将XML内容写到对应DB的多个表中

阅读更多

data.xml

<?xml version="1.0" encoding="UTF-8"?>
<dbData>
  <t_information number="0">
    <id>'1'</id>
    <content>'ed'</content>
    <createDate>' '</createDate>
    <source>'ff'</source>
    <title>'fff'</title>
    <url>' '</url>
    <equipment_id>null</equipment_id>
    <type_id>null</type_id>
  </t_information>
  <t_information number="1">
    <id>'2'</id>
    <content>'cc'</content>
    <createDate>' '</createDate>
    <source>'cc'</source>
    <title>' '</title>
    <url>' '</url>
    <equipment_id>null</equipment_id>
    <type_id>null</type_id>
  </t_information>
  <t_user number="0">
    <id>'1'</id>
    <birthday>' '</birthday>
    <enabled>'1'</enabled>
    <gender>' '</gender>
    <password>'33'</password>
    <realName>'dd'</realName>
    <school>'dd'</school>
    <specialty>' '</specialty>
    <username>' '</username>
  </t_user>
  <t_user number="1">
    <id>'2'</id>
    <birthday>' '</birthday>
    <enabled>'1'</enabled>
    <gender>' '</gender>
    <password>'dfgd'</password>
    <realName>'dg'</realName>
    <school>'dfg'</school>
    <specialty>'dfd'</specialty>
    <username>'dfg'</username>
  </t_user>
  <t_user number="2">
    <id>'3'</id>
    <birthday>' '</birthday>
    <enabled>'0'</enabled>
    <gender>' '</gender>
    <password>'45'</password>
    <realName>'reet'</realName>
    <school>'ert'</school>
    <specialty>'ert'</specialty>
    <username>'ert'</username>
  </t_user>
  <t_user number="3">
    <id>'5'</id>
    <birthday>'1900-01-01 00:00:00.0'</birthday>
    <enabled>'0'</enabled>
    <gender>''</gender>
    <password>'452'</password>
    <realName>'reets'</realName>
    <school>'erts'</school>
    <specialty>'erts'</specialty>
    <username>'erts'</username>
  </t_user>
  <t_user number="4">
    <id>'6'</id>
    <birthday>'1900-01-01 00:00:00.0'</birthday>
    <enabled>'2'</enabled>
    <gender>'2'</gender>
    <password>'4542'</password>
    <realName>'re2ets'</realName>
    <school>'er2ts'</school>
    <specialty>'e2rts'</specialty>
    <username>'ert2s'</username>
  </t_user>
  <t_user number="5">
    <id>'7'</id>
    <birthday>'1900-01-01 00:00:00.0'</birthday>
    <enabled>'42'</enabled>
    <gender>'22'</gender>
    <password>'4542'</password>
    <realName>'re22ets'</realName>
    <school>'er2t2s'</school>
    <specialty>'e2r3ts'</specialty>
    <username>'ert22s'</username>
  </t_user>
</dbData>

 

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

public class XMLToDB {
	@SuppressWarnings("unchecked")
public void ParseXMl() throws Exception {
SAXBuilder sb = new SAXBuilder();// 建立构造器
Document doc = sb.build(new FileInputStream("c:/data.xml"));// 读入指定文件
Element root = doc.getRootElement();// 获得根节点
List list = root.getChildren();// 将根节点下的所有子节点放入List中
	//删除原表中的内容
	for(int i=0;i<list.size();i++){
		Element item=(Element)list.get(i);
		String tableName=item.getName();
		String sql= "delete from "+tableName;
		String  tn="";
		if(!tableName.equals(tn))executeTable(sql);
			tn=tableName;
			
		}
	for (int i = 0; i < list.size(); i++) {
	Element item = (Element) list.get(i);// 获取节点实例
	String tableName = item.getName();// 获得元素节点的值为表名
		//System.out.println("-----------" + tableName);
// 获得所有的content一个[[Text:], [Element: <title/>], [Text:], [Element:
// <content/>], [Text: ],
// [Element: <email/>], [Text:]]
	  List llist = item.getContent();
	Iterator it = llist.iterator();
// 获取表中每一个字段的值,如title,content,email,放到columnList
	List columnList = new ArrayList();
	while (it.hasNext()) {
		Object object = it.next();
		if (!object.toString().substring(1, 2).equals("T"))
		columnList.add(object.toString().substring(
object.toString().indexOf("<") + 1,object.toString().indexOf("/")));
				else {
					continue;
				}
			}

	Map columndata = new HashMap();// 存储表字段与对应的值
	Iterator column = columnList.iterator();
		while (column.hasNext()) {
		// System.out.println(column.next());
		String columnname = column.next().toString();
String value = item.getChild(columnname).getText();// 取得属性值
		columndata.put(columnname, value);
	//System.out.println(columnname + "-->" + value);
			}

			String aa = "", bb = "";
			int m = 0;
		//遍历map中的key,value组成表中的一行
		Set<Map.Entry> set = columndata.entrySet();
		for (Map.Entry me : set) {
			if("id".equals(me.getKey()))continue;
			else{
			String key = (String) me.getKey();
			String value = (String) me.getValue();
			if (m != 0) {
				     aa = aa + "," + key;
	                                             bb = bb + "," + value;
			} else{
				aa = key;
				bb = value;
			             }
			    m++;
			   }				
			}//for
String sql = "insert into " + tableName + "(" + aa + ") values ("+ bb + ")";
	//System.out.println(sql);
	     executeTable(sql);

		}//向表中插入一行

	}
	
public static void executeTable(String sql)throws Exception{
	Statement stat=XMLToDB.getConn().createStatement();
		stat.execute(sql);
	}

 public static Connection getConn()throws Exception{
   Class.forName("net.sourceforge.jtds.jdbc.Driver");
   String connStr="jdbc:jtds:sqlserver://localhost:1433/webNews";
   Connection conn=DriverManager.getConnection(connStr,"sa","");
		 return conn;
	 }

public static void main(String[] args) {

	try {
	         XMLToDB xmlToDB = new XMLToDB();
	         xmlToDB.ParseXMl();
	} catch (Exception e) {
		
	                   e.printStackTrace();
		}

	}

}

 

分享到:
评论

相关推荐

    IBMDB2XML操作

    这会将XML数据解析成多个列,并返回对应的数据。 3. **基于XML字段的WHERE条件**: - 在`DB2SelectWhere.txt`中可能涵盖了如何在WHERE子句中使用XML字段。例如,可以使用`XMLQUERY`函数进行比较或模式匹配。`...

    XML for DB2(英文版)

    - **数据库模式到XML模式的映射**:DB2允许用户定义XML模式,并将其与数据库模式对应,这样就可以轻松地在数据库记录和XML文档之间进行转换。 - **原生XML数据库**:DB2还可以作为一个原生XML数据库,直接存储和管理...

    DB-Regist-XML.zip

    它很可能包含了多个XML文件,每个文件对应不同的数据库连接配置。这样的设计便于管理和切换不同的数据库环境,比如开发、测试和生产环境。通过解压这个ZIP文件,我们可以查看和修改这些XML配置,以适应不同的数据库...

    jdom\DB-xml-out.通过jdom把数据库中的数据读取到XML文件中

    这个过程涵盖了数据库连接、SQL查询、JDOM对象构建以及XML序列化等多个关键步骤,对于理解和实践Java中数据库与XML交互的开发者来说非常有价值。通过学习这个项目,你可以更好地理解如何在实际项目中处理类似的数据...

    读取xml转存sqlite(VS2010 ,VS2005)

    本教程将详细讲解如何在Visual Studio 2010和2005环境下,读取XML文件并将其内容存储到SQLite数据库中,同时解决中文乱码问题。 首先,解析XML文件是整个过程的第一步。在C++中,我们可以使用DOM(Document Object ...

    XMLtoDB-开源

    XMLtoDB是一个开源软件工具,专门设计用于将XML文件中的数据高效、准确地导入到数据库系统中。XML(可扩展标记语言)是一种广泛使用的数据交换格式,它允许以结构化的方式存储和传输信息。XMLtoDB解决了XML数据与...

    DB2认证复习资料

    DB2 认证是对 IT 专业人士在使用和管理 DB2 数据库技能的验证,它包括多个级别的认证,例如 DB2 Associate、DB2 Administrator 等。通过 DB2 认证的考试,你需要对 DB2 的基础知识、SQL、索引、访问计划、安全性等...

    xml query optimize

    Oracle XMLDB是Oracle数据库提供的一个特性,它允许用户存储、检索和管理XML数据,如同管理关系型数据一样。XMLDB支持SQL/XML和XQuery两种标准,用于处理存储在数据库中的XML文档。本文档是Oracle在2013年发布的...

    使用JDBC实现XML文档到Oracle9i数据库的存取.pdf

    这通常涉及到创建一个或多个表,这些表的列对应于XML文档的元素,数据类型为XMLType。XML文档的内容可以被解析并插入到这些XMLType列中。此外,XMLType支持XPath和XQuery等XML查询语言,使得在数据库中查询XML数据变...

    DB2 701教程,英文版

    每个压缩包中的文件(db2cert701x-a4.pdf)可能对应一个或多个主题,详细展开每个主题,帮助学习者逐步深入理解和掌握DB2的相关技术。由于是英文教程,建议有一定英文阅读基础的用户使用,并且可以通过翻译工具辅助...

    SQLServer与DB2迁移中的主要差别及解决办法

    为了顺利完成数据库结构的迁移,必须精确地将源数据库的数据类型映射到目标数据库中对应的类型上。 ### 三、已定义函数的差异 SQL Server与DB2在预定义函数的支持上也存在区别,这往往导致了在查询或存储过程编写...

    XML解析和数据库连接池

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点遍历来访问和修改XML内容。这种方法适用于小型XML文件,但对于大型文件可能会消耗大量内存。 SAX解析器则采用事件驱动的方式,逐个读取...

    Web设计中如何使用XML数据

    如果XML数据岛包含多个相同的元素(如 `&lt;name&gt;` 或 `&lt;sex&gt;`),可以使用 `&lt;TABLE&gt;` 标签来显示所有实例,每个 `&lt;member&gt;` 对象将对应表格的一行: ```html &lt;table datasrc="#xmldb" border="1"&gt; &lt;th&gt;Name &lt;th&gt;...

    Xstream解析xml

    总的来说,使用Xstream解析XML文件并存入MySQL数据库是一个常见的数据处理任务,它涉及XML解析、Java对象映射以及数据库操作等多个技术点。通过合理地组织代码,可以高效地完成这项工作,实现数据的无缝迁移和存储。

    db2expln使用说明

    1. **对比不同执行计划**:分析多个执行计划可以帮助你找到最佳的查询路径。 2. **考虑索引**:根据DB2 Expln的建议,适时创建或调整索引,以提高查询速度。 3. **避免全表扫描**:尽量使用索引来减少对全表扫描的...

    Berkeley DB参考资料

    - **多游标联合**:在多个数据库间执行复杂的关联查询。 - **应用场景**:多表关联查询、数据分析等。 #### 2. BerkeleyDB 环境 API - **2.1 概述** - **环境层的作用**:为数据库提供运行时环境,包括资源管理...

    Tomcat配置hibernate xml模板

    4. **配置数据源**:在某些情况下,你可能需要在`server.xml`中配置一个全局数据源,供多个应用共享。例如,如果你使用Apache DBCP,可以在`GlobalNamingResources`元素下添加以下配置: ```xml type="javax.sql...

    DB2手册pdf

    ` 这将返回表中的前10行。 #### 游标的使用 **游标**是用于处理结果集的工具,允许逐行读取数据。在DB2中,可以使用`DECLARE`、`OPEN`、`FETCH`、`CLOSE`等语句来控制游标。 #### 类似DECODE的转码操作 在DB2中,...

    DBImport工具

    在数据导入过程中,DBImport工具可能需要解析XML或TXT文件,将其内容转换成数据库能理解的格式。同样,在导出数据时,它会将数据库中的记录转换为XML或TXT格式,方便在其他非数据库环境中使用。此外,该工具可能还...

Global site tag (gtag.js) - Google Analytics