工作小结:xml文件导入到oracle
上周遇到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类:
- package com.wj;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- public class DbUtil {
- /**
- * @throws SQLException
- * @Title: getConnection
- * @Description: 取得Connection
- * @param @return
- * @return Connection
- * @throws
- */
- public static Connection getConnection() {
- // 加载驱动,使用反射来实现
- Connection conn = null;
- try {
- //驱动连接
- Class.forName("oracle.jdbc.driver.OracleDriver");
- // 连接
- String url = "jdbc:oracle:thin:@10.10.54.44:15211:credit";
- String username = "creditxf"; //连接数据库的用户名
- String password = "credit"; //连接数据库的密码
- conn = DriverManager.getConnection(url, username, password); //进行连接
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return conn;
- }
- public static void close(PreparedStatement pstmt, Connection conn) {
- try{
- if(conn !=null){
- conn.close();
- }
- }catch(Exception e){
- }finally{
- try{
- if(pstmt!=null){
- pstmt.close();
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }
- }
二:TestXMLImport
- package com.wj;
- import java.io.File;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- import java.util.Iterator;
- import java.util.List;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- public class TestXMLImport {
- public static void main(String[] args) throws SQLException {
- // TODO Auto-generated method stub
- // 执行插入的SQL语句,
- String sql="insert into TB_SWZJ_AJNSRMD(NSRSBH, XH, NSRMC, PJND) values (?, ?, ?, ?)";
- Connection conn = null;
- PreparedStatement pstmt = null;
- try {
- conn = DbUtil.getConnection();
- pstmt = conn.prepareStatement(sql);
- // 读取xml文件存放的路径
- Document doc=new SAXReader().read(new File("D:\\JAVADEMO\\XML\\xml\\TB_SWZJ_AJNSRMD_00001.xml"));
- // 查找对应的信息,从XMl中找对应的层层关系,我的xml文件中,一开始只是Rows,然后每条数据为Row。
- List itemList= doc.selectNodes("/Rows/Row");
- // 遍历
- for(Iterator iter=itemList.iterator();iter.hasNext();){
- Element el=(Element) iter.next();
- // 使用Element的elementText属性取值,将值一一取出来,这个没有取xml文件中TRANS_DM_TONG_INSERTDATE字段,是因为我需要
系统时间作为时间字段,默认时间为sysdate- String NSRSBH=el.elementText("NSRSBH");
- String XH=el.elementText("XH");
- String NSRMC=el.elementText("NSRMC");
- String PJND=el.elementText("PJND");
- // 通过pstmt赋值
- pstmt.setString(1, NSRSBH);
- pstmt.setString(2, XH);
- pstmt.setString(3,NSRMC);
- pstmt.setString(4, PJND);
- pstmt.addBatch();
- }
- pstmt.executeBatch();
- // 提示
- System.out.println("将XML导入数据库成功");
- } catch (DocumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- // 关闭
- DbUtil.close(pstmt,conn);
- }
- }
- }
这样就可以将数据导入到数据库里面了,亲测有效。
下面放出我困惑很久的存储过程(亲测无效,但是我依旧不知道怎么办的) 执行无结果,运行不报错:
- CREATE OR REPLACE PROCEDURE addRow(file_path VARCHAR2,log_path VARCHAR2)
- AS
- --//XML解析器
- xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
- --//DOM文档对象
- doc xmldom.DOMDocument;
- len integer;
- RowNodes xmldom.DOMNodeList;
- chilNodes xmldom.DOMNodeList;
- tempNode xmldom.DOMNode;
- tempArrMap xmldom.DOMNamedNodeMap;
- --================================
- --以下变量用于获取XML节点的值
- XH varchar2(20);
- NSRSBH varchar2(200);
- NSRMC varchar2(500);
- PJND varchar2(200);
- TRANS_DM_TONG_INSERTDATE TIMESTAMP(6);
- tmp integer;
- --================================
- BEGIN
- xmlPar := xmlparser.newParser;
- xmlparser.setErrorLog( xmlPar, log_path);
- xmlparser.parse(xmlPar, file_path);
- doc := xmlparser.getDocument( xmlPar );
- -- 释放解析器实例
- xmlparser.freeParser(xmlPar);
- -- 获取所有Row元素
- RowNodes := xmldom.getElementsByTagName( doc, 'Row' );
- len := xmldom.getLength( RowNodes );
- --遍历所有Row元素
- FOR i in 0..len-1
- LOOP
- --获取第i个Row
- tempNode := xmldom.item( RowNodes, i );
- --所有属性
- tempArrMap := xmldom.getAttributes(tempNode);
- --获取所有子节点
- chilNodes := xmldom.getChildNodes(tempNode);
- --获取子节点的个数
- tmp := xmldom.GETLENGTH( chilNodes );
- --获取各个子节点的值
- NSRSBH := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
- XH := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
- NSRMC := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 )));
- PJND := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 )));
- TRANS_DM_TONG_INSERTDATE := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
- --插入数据
- INSERT INTO TB_SWZJ_AJNSRMD VALUES (NSRSBH,XH,NSRMC,PJND,TRANS_DM_TONG_INSERTDATE);
- COMMIT;
- END LOOP;
- -- 释放文档对象
- xmldom.freeDocument(doc);
- EXCEPTION
- WHEN OTHERS THEN
- DBMS_output.PUT_LINE(SQLERRM);
- END addRow;
- 运行:
- call addRow('D:/DEMO/ANS.xml','D:/DEMO/xmllog.txt');
有大哥帮小弟解决 这个问题的,小弟感激不尽。
工作小结:xml文件导入到oracle的更多相关文章
- 如何将XML文件导入Excel中
如下图所示为一个规范的XML文件,在Excel中可以将规范的XML文件导入到Excel成为规范的表格.具体有如下几种方法: 工具/原料 Excel 方法/步骤 单击“数据”选项卡下的“ ...
- 【DRP】採用dom4j完毕XML文件导入数据库
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lantingxv_jing/article/details/37762523 xml文件在如 ...
- 如何将dmp文件导入到Oracle
一.概述 在将dmp文件导入到Oracle中之前,需要先创建一个orcale用户.然后使用该用户名和密码,以imp的方式将数据导入到oracle中. 二.执行步骤 1.登陆oracle数据库 a.sq ...
- 如何将dmp文件导入到oracle数据库中
如何将dmp文件导入到oracle数据库中 1.首先,我们可以先建立自己的一个用户表空间,创建表空间的格式如下: CREATE TABLESPACE certification(表空间的名字) DAT ...
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库
简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...
- SpringIOC注入模块中xml文件导入其他xml文件配置
如果我们在spring框架中配置了多个xml文件,我们可以在读取配置文件的时候把这些xml文件一下全都读取 也可以只读一个总的xml文件,在这个总的xml文件中把其他的xml全都都导入进来. 例如: ...
- Excel和XML文件导入
using System;using System.Collections;using System.Collections.Generic;using System.Configuration;us ...
- Sqoop 将hdfs上的文件导入到oracle中,关于date类型的问题
近期的项目中,需要将hadoop运行完成的结果(存在于hdfs上)导入到oracle中,但是在用sqoop导入hdfs中的日期字段'2016-03-01'时,sqoop报错,说date类型必须为'yy ...
- TXT文件导入到ORACLE数据库中
--创建表 (sqlplus执行) drop table cjw; ),phone ),city ),born ),adressJob ),mail )); ### txt导入到oracle cat ...
随机推荐
- 解决IIS无法启动w3svc
1>:首先在CMD命令行中输入:fsutil resource setautoreset true c:\ 2>:然后在运行services.msc 3>:找到Windows Pro ...
- Android破解学习之路(八)—— 进化之地内购破解
最近在TapTap闲逛,看到了进化之地这款游戏,TapTap上有两个进化之地,一个是在TapTap直接购买的,另外一个则是试玩版,玩到中间就会有个购买完整版. 试玩版连接:https://www.ta ...
- Spring笔记02_注解_IOC
目录 Spring笔记02 1. Spring整合连接池 1.1 Spring整合C3P0 1.2 Spring整合DBCP 1.3 最终版 2. 基于注解的IOC配置 2.1 导包 2.2 配置文件 ...
- 虚拟机下centos7.x简易命令大全与试玩体验
OS: liunxversion: centos7.xdate: 2019-01-18 1. cd / : 进入服务器根目录2. cd . ...
- 仿9GAG制作过程(一)
有话要说: 准备开始学习Android应用程序的一个完整的设计过程.准备做一个仿9GAG的APP,前端界面设计+后台数据爬虫+后台接口设计,整个流程体验一遍.今天准备先把前端界面的框架给完成了. 成果 ...
- Linux系统下 MySQL 安装 指南(5.7和8.0 版本)
一. 准备工作 1 删除本地centos7中的mariadb: 查看系统中是否已安装 mariadb 服务: rpm -qa | grep mariadb 或 yum list installed | ...
- chart 模板 - 每天5分钟玩转 Docker 容器技术(165)
Helm 通过模板创建 Kubernetes 能够理解的 YAML 格式的资源配置文件,我们将通过例子来学习如何使用模板. 以 templates/secrets.yaml 为例: 从结构看,文件的内 ...
- jsoup爬取网站图片
package com.ij34.JsoupTest; import java.io.File; import java.io.FileOutputStream; import java.io.Inp ...
- C#-事件event
目录 1. 简介 2.实际案例 2.1实际案例1 2.2实际案例2--带有参数的事件 3.标准事件的用法 3.1通过扩展EventArgs来传递数据 3.2代码实例 1. 简介 事件是一种类型安全的委 ...
- Linux PXE无人值守网络装机
Linux PXE无人值守网络装机 一.实验环境: 2台Linux系统(RHEL6.5版本),1台作为:PXE远程安装服务器(安装dhcp服务.ftp服务.tftp服务),另1台作为:客户端(未装RH ...