java 解析xml 并且将数据自动存入mysql数据库

  1 package hello.entity.jiexi_xml;
  2
  3 import org.jdom.Document;
  4 import org.jdom.Element;
  5 import org.jdom.JDOMException;
  6 import org.jdom.Namespace;
  7 import org.jdom.input.SAXBuilder;
  8
  9 import java.io.FileInputStream;
 10 import java.io.IOException;
 11 import java.io.InputStream;
 12 import java.sql.*;
 13 import java.util.List;
 14 public class DB {
 15
 16 //数据库的连接
 17     private static String URL = "jdbc:mysql://localhost:3306/test";
 18     private static String USERNAME = "root";
 19     private static String PASSWORD = "root";
 20
 21
 22     public static Connection getConn(){
 23         Connection conn = null;
 24         try {
 25         Class.forName("com.mysql.jdbc.Driver");
 26         conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
 27         } catch (Exception e) {
 28             e.printStackTrace();
 29             }   return conn;
 30             }
 31
 32     public static Statement createStmt(Connection conn){
 33         Statement stmt = null;
 34         try {
 35             stmt = conn.createStatement();
 36         } catch (SQLException e) {
 37             e.printStackTrace();
 38         }
 39         return stmt;
 40     }
 41
 42     public static ResultSet executeQuery(Statement stmt,String sql){
 43         ResultSet rs = null;
 44         try {
 45             rs = stmt.executeQuery(sql);
 46         } catch (SQLException e) {
 47             e.printStackTrace();
 48         }
 49         return rs;
 50     }
 51
 52     public static PreparedStatement prepareStmt(Connection conn,String sql){
 53         PreparedStatement pStmt = null;
 54         try {
 55             pStmt = conn.prepareStatement(sql);
 56         } catch (SQLException e) {
 57             e.printStackTrace();
 58         }
 59         return pStmt;
 60     }
 61
 62
 63
 64     public static void main(String[] args) {
 65         try {
 66             XmlParse();
 67         } catch (JDOMException e) {
 68             e.printStackTrace();
 69         } catch (IOException e) {
 70             e.printStackTrace();
 71         }
 72         }
 73
 74
 75      public static void XmlParse() throws JDOMException, IOException {
 76          SAXBuilder builder = new SAXBuilder();
 77          InputStream file = new FileInputStream("ceshi.xml");          //测试文件的路径
 78
 79           {
 80           Document document = builder.build(file);//加载文件
 81           Element root = document.getRootElement();//设置根节点
 82
 83           Namespace ns = root.getNamespace("gml");
 84           List<Element> list = root.getChildren("a",ns);
 85           for(Element e1:list){
 86               Namespace ns2 = e1.getNamespace("esri");
 87               Element e2 = e1.getChild("x",ns2);
 88               String ID = e2.getAttributeValue("fid");
 89               System.out.println("ID =" + ID);
 90
 91               Namespace ns3 = e2.getNamespace("esri");
 92               Element e3 = e2.getChild("OBJECTID",ns3);
 93
 94               Namespace ns4 = e2.getNamespace("gml");
 95               Element e4 = e2.getChild("b",ns4);
 96
 97               Namespace ns5 = e4.getNamespace("gml");
 98               Element e5 = e4.getChild("c",ns5);
 99
100               Namespace ns6 = e5.getNamespace("gml");
101               Element e6 = e5.getChild("d",ns6);
102
103               Namespace ns7 = e6.getNamespace("gml");
104               Element e7 = e6.getChild("e",ns7);
105
106               Namespace ns8 = e7.getNamespace("gml");
107               Element e8 = e7.getChild("f",ns8);
108
109               Namespace ns9 = e8.getNamespace("gml");
110               Element e9 = e8.getChild("g",ns9);
111
112               Namespace ns10 = e9.getNamespace("gml");
113               Element e10 = e9.getChild("coordinates",ns10);
114               String POINT1 = e10.getTextTrim();
115               System.out.println("POINT1 =" + POINT1);
116
117               Namespace ns11 = e2.getNamespace("gml");
118               Element e11 = e2.getChild("envelope",ns11);
119               String POINT2 = e11.getTextTrim();
120               System.out.println("POINT2 =" + POINT2);
121
122               Namespace ns12 = e2.getNamespace("esri");
123               Element e12 = e2.getChild("a",ns12);
124               String NAME = e12.getTextTrim();
125               System.out.println("NAME =" + NAME);
126
127               Connection conn = DB.getConn();
128                 String sql = "insert into CESHI(ID,NAME,POINT1,POINT2) values (?,?,?,?)";
129                 PreparedStatement pStmt = DB.prepareStmt(conn,sql);
130                 try {
131
132                     pStmt.setString(1,ID);
133                     pStmt.setString(2,NAME);
134                     pStmt.setString(3,POINT1);
135                     pStmt.setString(4,POINT2);
136                     pStmt.executeUpdate();
137                 } catch (SQLException e) {
138                     e.printStackTrace();
139                 }
140           }
141           }
142      }
143     public static void close(Connection con,Statement sm,ResultSet rs){
144         try {
145             if(con!=null){
146                 con.close();
147                 }
148             if(sm!=null){
149                 sm.close();
150                 }
151             if(rs != null){
152                 rs.close();
153                 }
154             } catch (SQLException e) {
155                 e.printStackTrace();
156                 }
157             }
158     }
159
160             

代码逻辑很清楚,只说一点,我这个项目用到的xml文件要放在项目根目录下,位置注意!

ceshi.xml:

 1 <?xml version="1.0" encoding="gbk"?>
 2 <wfs:FeatureCollection xmlns:esri="http://www.esri.com/esri" xmlns:gml="http://www.opengis.net/gml" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc">
 3     <gml:a>
 4         <esri:x fid="111">
 5             <esri:OBJECTID>14</esri:OBJECTID>
 6             <gml:b>
 7                 <gml:c srsName="1111">
 8                     <gml:d>
 9                         <gml:e>
10                             <gml:f>
11                                 <gml:g>
12                                     <gml:coordinates>111</gml:coordinates>
13                                 </gml:g>
14                             </gml:f>
15                         </gml:e>
16                     </gml:d>
17                 </gml:c>
18             </gml:b>
19             <gml:envelope>222</gml:envelope>
20             <esri:a>aaa</esri:a>
21             <esri:b/>
22             <esri:c>20121213</esri:c>
23             <esri:d>20121213</esri:d>
24             <esri:e>123456</esri:e>
25             <esri:LEN>78910</esri:LEN>
26         </esri:x>
27     </gml:a>
28          <gml:a>
29         <esri:x fid="112">
30             <esri:OBJECTID>14</esri:OBJECTID>
31             <gml:b>
32                 <gml:c srsName="1111">
33                     <gml:d>
34                         <gml:e>
35                             <gml:f>
36                                 <gml:g>
37                                     <gml:coordinates>112</gml:coordinates></gml:g>
38                             </gml:f>
39                         </gml:e>
40                     </gml:d>
41                 </gml:c>
42             </gml:b>
43             <gml:envelope>222</gml:envelope>
44             <esri:a>aaa</esri:a>
45             <esri:b/>
46             <esri:c>20121213</esri:c>
47             <esri:d>20121213</esri:d>
48             <esri:e>123456</esri:e>
49             <esri:LEN>78910</esri:LEN>
50         </esri:x>
51     </gml:a>
52 </wfs:FeatureCollection>

然后现在test数据库里新建一个CESHI表,建好后跑一下java文件,

表示已经在mysql中生成了数据,所以才提示primary key 111和112重复,不用管。

现在打开mysql工具,发现CESHI表里是不是已经多了几行数据?

ok,现在大功告成!

时间: 2024-10-19 07:40:39

java 解析xml 并且将数据自动存入mysql数据库的相关文章

Scrapy爬取慕课网(imooc)所有课程数据并存入MySQL数据库

爬取目标:使用scrapy爬取所有课程数据,分别为 1.课程名 2.课程简介 3.课程等级 4.学习人数 并存入MySQL数据库  (目标网址  http://www.imooc.com/course/list) 一.导出数据文件到本地 1.新建imooc项目 1 scrapy startproject imooc 2.修改 items.py,添加项目item 1 from scrapy import Item,Field 2 class ImoocItem(Item): 3 Course_na

java解析xml的三种方法

java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; // public class Saxhandler extends DefaultHandler { @Override public void startDocument() throws

详解Java解析XML的四种方法

(1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ①允许应用程序对数据和结构做出更改. ②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据. [缺点] ①通常需要加载整个XML文档来构造层次结构,消耗资源大. [解析详解] ①构建Document对象: DocumentBuilderFactory dbf = DocumentBu

Java 解析 XML

Java 解析 XML XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点: 便于实现增 删 改 查 缺点: XML文件过大可能造成内存溢出 SAX方式 采用事件驱动模型边读边解析:从上到下一行行解析,解析到某一元素, 调用相应解析方法 优点: 不会造成内存溢出, 缺点: 查询不方便,但不能实现 增 删 改 不同的公司和组织提供了针对DOM和SAX两种方式的解析器 SUN的jaxp Dom4j

java解析xml文件

为什么使用xml作为数据交换?为什么用java解析xml?为什么用dom4J解析xml?dom解析和sax解析到底有什么区别? 带着这样的问题去学习,你发现这样的学习是最高效的 首先第一个问题:为什么使用xml作为数据交换 首先xml是一种无平台限制,无语言限制,无系统限制.使得xml可以在不同语言写的系统进行数据的交换,不同语言写的系统之间需求是不会改变,可能xml这种传输数据的介质会被其他的替代.比如json,可能json也会面临被替代.方式改变.但是需求是不会改变的.而且xml树节点的结构

我也来学着写写WINDOWS服务-解析xml抓取数据并插入数据库

项目告一段落,快到一年时间开发了两个系统,一个客户已经在试用,一个进入客户测试阶段,中间突然被项目经理(更喜欢叫他W工)分派一个每隔两小时用windows服务去抓取客户提供的外网xml,解析该xml,然后将截取的节点字段值插入到已经建好相应结构的表中.并记录日志. xml结构概要如下: <?xml version="1.0" encoding="UTF-8"?> <list> <info> <id>93ef7c7ccc

Java解析XML文件的四种方法

[摘要] 可扩展标志语言(XML)在实现信息标准化.信息的交流与共享上有其独特的技术优势,因此受到了广泛的重视.本文先简单的介绍了XML基本知识,然后从XML应用入手总结了四种现今最常见的XML的解析方法,介绍了这四种方法的特点,其中包括优点与不足之处.最后给出了一个简单的案例来对这四种解析进行代码介绍. [关键字] XML文件,DOM,SAX,JDOM,DOM4J [引言] XML即可扩展标记语言(EXtensible Markup Language),是标准通用标记语言的子集,是一种用于标记

详解Java解析XML的四种方法(转)

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xm

XML基础+Java解析XML +几种解析方式的性能比较

XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数据,其焦点是数据的内容. HTML 被设计用来展示数据,其焦点是数据的外观. HTML可以不关闭标签(即标签可以不成对出现),但XML必须关闭标签(即标签必须成对出现). HTML中的标签标识文本如何展示,而XML中的标签标识文本是什么含义(什么类型的文本). XML文档节点类型 u     文档(