上周遇到xml文件导入到oracle数据库中,发现正常的xml转成excle格式导入,只针对于1m以下的xml文件。当xml文件太大的时候,就没有作用了。

这时候,我找到了两种办法,一个是java,一个是数据库的存储过程,但是数据库的存储过程还有些问题,需要自己琢磨一会。

现在就展示java的用法将xml文件导入到oracle数据库中:

  首先需要三个jar包:

dom4j-1.6.1.jar(因为采用dom4j辅助存入,所以这个是必要的)

jaxen-1.1.1.jar(使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是个不错的方法)

ojdbc6.jar(和数据库打交道)

jar包可以直接在maven官网中下载,方便快捷。

导入到数据库的xml文件的格式为:

一:DbUtil类:

  1. package com.wj;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6.  
  7. public class DbUtil {
  8. /**
  9. * @throws SQLException
  10. * @Title: getConnection
  11. * @Description: 取得Connection
  12. * @param @return
  13. * @return Connection
  14. * @throws
  15. */
  16. public static Connection getConnection() {
  17. // 加载驱动,使用反射来实现
  18. Connection conn = null;
  19. try {
  20. //驱动连接
  21. Class.forName("oracle.jdbc.driver.OracleDriver");
  22. // 连接
  23. String url = "jdbc:oracle:thin:@10.10.54.44:15211:credit";
  24. String username = "creditxf"; //连接数据库的用户名
  25. String password = "credit"; //连接数据库的密码
  26. conn = DriverManager.getConnection(url, username, password); //进行连接
  27. } catch (ClassNotFoundException e) {
  28.  
  29. e.printStackTrace();
  30. } catch (Exception e) {
  31.  
  32. e.printStackTrace();
  33. }
  34. return conn;
  35.  
  36. }
  37.  
  38. public static void close(PreparedStatement pstmt, Connection conn) {
  39. try{
  40. if(conn !=null){
  41. conn.close();
  42. }
  43. }catch(Exception e){
  44. }finally{
  45. try{
  46. if(pstmt!=null){
  47. pstmt.close();
  48. }
  49. }catch(Exception e){
  50. e.printStackTrace();
  51. }
  52. }
  53.  
  54. }
  55.  
  56. }

二:TestXMLImport

  1. package com.wj;
  2. import java.io.File;
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.SQLException;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import org.dom4j.Document;
  9. import org.dom4j.DocumentException;
  10. import org.dom4j.Element;
  11. import org.dom4j.io.SAXReader;
  12.  
  13. public class TestXMLImport {
  14.  
  15. public static void main(String[] args) throws SQLException {
  16. // TODO Auto-generated method stub
  17. // 执行插入的SQL语句,
  18. String sql="insert into TB_SWZJ_AJNSRMD(NSRSBH, XH, NSRMC, PJND) values (?, ?, ?, ?)";
  19. Connection conn = null;
  20. PreparedStatement pstmt = null;
  21. try {
  22. conn = DbUtil.getConnection();
  23. pstmt = conn.prepareStatement(sql);
  24. // 读取xml文件存放的路径
  25. Document doc=new SAXReader().read(new File("D:\\JAVADEMO\\XML\\xml\\TB_SWZJ_AJNSRMD_00001.xml"));
  26. // 查找对应的信息,从XMl中找对应的层层关系,我的xml文件中,一开始只是Rows,然后每条数据为Row。
  27. List itemList= doc.selectNodes("/Rows/Row");
  28. // 遍历
  29. for(Iterator iter=itemList.iterator();iter.hasNext();){
  30. Element el=(Element) iter.next();
  31. // 使用Element的elementText属性取值,将值一一取出来,这个没有取xml文件中TRANS_DM_TONG_INSERTDATE字段,是因为我需要
              系统时间作为时间字段,默认时间为sysdate
  32. String NSRSBH=el.elementText("NSRSBH");
  33. String XH=el.elementText("XH");
  34. String NSRMC=el.elementText("NSRMC");
  35. String PJND=el.elementText("PJND");
  36.  
  37. // 通过pstmt赋值
  38. pstmt.setString(1, NSRSBH);
  39. pstmt.setString(2, XH);
  40. pstmt.setString(3,NSRMC);
  41. pstmt.setString(4, PJND);
  42.  
  43. pstmt.addBatch();
  44. }
  45. pstmt.executeBatch();
  46. // 提示
  47. System.out.println("将XML导入数据库成功");
  48. } catch (DocumentException e) {
  49. // TODO Auto-generated catch block
  50. e.printStackTrace();
  51. }finally{
  52. // 关闭
  53. DbUtil.close(pstmt,conn);
  54.  
  55. }
  56. }
  57. }

这样就可以将数据导入到数据库里面了,亲测有效。

下面放出我困惑很久的存储过程(亲测无效,但是我依旧不知道怎么办的) 执行无结果,运行不报错:

  1. CREATE OR REPLACE PROCEDURE addRow(file_path VARCHAR2,log_path VARCHAR2)
  2. AS
  3. --//XML解析器
  4. xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
  5. --//DOM文档对象
  6. doc xmldom.DOMDocument;
  7. len integer;
  8. RowNodes xmldom.DOMNodeList;
  9. chilNodes xmldom.DOMNodeList;
  10. tempNode xmldom.DOMNode;
  11. tempArrMap xmldom.DOMNamedNodeMap;
  12. --================================
  13. --以下变量用于获取XML节点的值
  14. XH varchar2(20);
  15. NSRSBH varchar2(200);
  16. NSRMC varchar2(500);
  17. PJND varchar2(200);
  18. TRANS_DM_TONG_INSERTDATE TIMESTAMP(6);
  19. tmp integer;
  20. --================================
  21. BEGIN
  22. xmlPar := xmlparser.newParser;
  23. xmlparser.setErrorLog( xmlPar, log_path);
  24. xmlparser.parse(xmlPar, file_path);
  25. doc := xmlparser.getDocument( xmlPar );
  26. -- 释放解析器实例
  27. xmlparser.freeParser(xmlPar);
  28. -- 获取所有Row元素
  29. RowNodes := xmldom.getElementsByTagName( doc, 'Row' );
  30. len := xmldom.getLength( RowNodes );
  31. --遍历所有Row元素
  32. FOR i in 0..len-1
  33. LOOP
  34. --获取第iRow
  35. tempNode := xmldom.item( RowNodes, i );
  36. --所有属性
  37. tempArrMap := xmldom.getAttributes(tempNode);
  38. --获取所有子节点
  39. chilNodes := xmldom.getChildNodes(tempNode);
  40. --获取子节点的个数
  41. tmp := xmldom.GETLENGTH( chilNodes );
  42. --获取各个子节点的值
  43. NSRSBH := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
  44. XH := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
  45. NSRMC := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 )));
  46. PJND := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 )));
  47. TRANS_DM_TONG_INSERTDATE := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
  48.  
  49. --插入数据
  50. INSERT INTO TB_SWZJ_AJNSRMD VALUES (NSRSBH,XH,NSRMC,PJND,TRANS_DM_TONG_INSERTDATE);
  51. COMMIT;
  52. END LOOP;
  53. -- 释放文档对象
  54. xmldom.freeDocument(doc);
  55. EXCEPTION
  56. WHEN OTHERS THEN
  57. DBMS_output.PUT_LINE(SQLERRM);
  58. END addRow;
  1. 运行:
  2. call addRow('D:/DEMO/ANS.xml','D:/DEMO/xmllog.txt');

有大哥帮小弟解决 这个问题的,小弟感激不尽。

工作小结:xml文件导入到oracle的更多相关文章

  1. 如何将XML文件导入Excel中

    如下图所示为一个规范的XML文件,在Excel中可以将规范的XML文件导入到Excel成为规范的表格.具体有如下几种方法:   工具/原料   Excel 方法/步骤     单击“数据”选项卡下的“ ...

  2. 【DRP】採用dom4j完毕XML文件导入数据库

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lantingxv_jing/article/details/37762523     xml文件在如 ...

  3. 如何将dmp文件导入到Oracle

    一.概述 在将dmp文件导入到Oracle中之前,需要先创建一个orcale用户.然后使用该用户名和密码,以imp的方式将数据导入到oracle中. 二.执行步骤 1.登陆oracle数据库 a.sq ...

  4. 如何将dmp文件导入到oracle数据库中

    如何将dmp文件导入到oracle数据库中 1.首先,我们可以先建立自己的一个用户表空间,创建表空间的格式如下: CREATE TABLESPACE certification(表空间的名字) DAT ...

  5. 【java项目实战】dom4j解析xml文件,连接Oracle数据库

    简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...

  6. SpringIOC注入模块中xml文件导入其他xml文件配置

    如果我们在spring框架中配置了多个xml文件,我们可以在读取配置文件的时候把这些xml文件一下全都读取 也可以只读一个总的xml文件,在这个总的xml文件中把其他的xml全都都导入进来. 例如: ...

  7. Excel和XML文件导入

    using System;using System.Collections;using System.Collections.Generic;using System.Configuration;us ...

  8. Sqoop 将hdfs上的文件导入到oracle中,关于date类型的问题

    近期的项目中,需要将hadoop运行完成的结果(存在于hdfs上)导入到oracle中,但是在用sqoop导入hdfs中的日期字段'2016-03-01'时,sqoop报错,说date类型必须为'yy ...

  9. TXT文件导入到ORACLE数据库中

    --创建表 (sqlplus执行) drop table cjw; ),phone ),city ),born ),adressJob ),mail )); ### txt导入到oracle cat ...

随机推荐

  1. 解决IIS无法启动w3svc

    1>:首先在CMD命令行中输入:fsutil resource setautoreset true c:\ 2>:然后在运行services.msc 3>:找到Windows Pro ...

  2. Android破解学习之路(八)—— 进化之地内购破解

    最近在TapTap闲逛,看到了进化之地这款游戏,TapTap上有两个进化之地,一个是在TapTap直接购买的,另外一个则是试玩版,玩到中间就会有个购买完整版. 试玩版连接:https://www.ta ...

  3. Spring笔记02_注解_IOC

    目录 Spring笔记02 1. Spring整合连接池 1.1 Spring整合C3P0 1.2 Spring整合DBCP 1.3 最终版 2. 基于注解的IOC配置 2.1 导包 2.2 配置文件 ...

  4. 虚拟机下centos7.x简易命令大全与试玩体验

    OS: liunxversion: centos7.xdate: 2019-01-18 1. cd  /                               : 进入服务器根目录2. cd . ...

  5. 仿9GAG制作过程(一)

    有话要说: 准备开始学习Android应用程序的一个完整的设计过程.准备做一个仿9GAG的APP,前端界面设计+后台数据爬虫+后台接口设计,整个流程体验一遍.今天准备先把前端界面的框架给完成了. 成果 ...

  6. Linux系统下 MySQL 安装 指南(5.7和8.0 版本)

    一. 准备工作 1 删除本地centos7中的mariadb: 查看系统中是否已安装 mariadb 服务: rpm -qa | grep mariadb 或 yum list installed | ...

  7. chart 模板 - 每天5分钟玩转 Docker 容器技术(165)

    Helm 通过模板创建 Kubernetes 能够理解的 YAML 格式的资源配置文件,我们将通过例子来学习如何使用模板. 以 templates/secrets.yaml 为例: 从结构看,文件的内 ...

  8. jsoup爬取网站图片

    package com.ij34.JsoupTest; import java.io.File; import java.io.FileOutputStream; import java.io.Inp ...

  9. C#-事件event

    目录 1. 简介 2.实际案例 2.1实际案例1 2.2实际案例2--带有参数的事件 3.标准事件的用法 3.1通过扩展EventArgs来传递数据 3.2代码实例 1. 简介 事件是一种类型安全的委 ...

  10. Linux PXE无人值守网络装机

    Linux PXE无人值守网络装机 一.实验环境: 2台Linux系统(RHEL6.5版本),1台作为:PXE远程安装服务器(安装dhcp服务.ftp服务.tftp服务),另1台作为:客户端(未装RH ...