xml解析数据信息并实现dbmanager操作mysql(代码片段)

hengly hengly     2022-12-04     600

关键词:

 

先前一直都是用的直接用加载驱动 然后创建连接进行操作数据 如果我的数据库换了 那么要修改的地方也比较多 不利于维护 所以就想到了将所有配置连接信息都用xml封装起来 以至于我每次都只要修改一下我的xml配置文件 不需要修改我的代码 这也就有了下面的操作 将驱动 url 用户名和密码都写到xml文件里面 

1 <?xml version="1.0" encoding="UTF-8"?>
2 <database>
3   <driver>com.mysql.jdbc.Driver</driver>
4   <url>jdbc:mysql://localhost:3306/employee</url>
5   <user>root</user>
6   <password>root</password>
7 </database>

有了xml 文件之后就需要来进行解析

 1     // 使用dom4j解析xml
 2     private static void parseXmlInfo() 
 3         // 创建saxreader对象
 4         SAXReader saxReader = new SAXReader();
 5         try 
 6             // 加载xml文件
 7             Document doc = saxReader.read(DBUtil.class.getResourceAsStream("/jdbc.xml"));
 8             // 获得根元素
 9             Element root = doc.getRootElement();
10             // 获得对应的元素的文本值
11             driver = root.elementText("driver");
12             url = root.elementText("url");
13             user = root.elementText("user");
14             password = root.elementText("password");
15 
16          catch (DocumentException e) 
17             // TODO Auto-generated catch block
18             e.printStackTrace();
19         
20     

解析完了之后就可以获取连接操作数据库 

将增删改封装到一个方法里面 以后每次只需要写sql语句就可以 

 1 /**
 2      * 修改数据的方法
 3      * 
 4      * @param sql
 5      * @param values sql中所有?的值
 6      *            
 7      * @return 0表示修改失败,其他表示修改成功
 8      */
 9     public static int update(String sql, Object[] values) 
10         PreparedStatement ps = null;
11         ResultSet rs = null;
12         // 获取连接
13         getConnection();
14         try 
15             // 创建prepareStatement
16             ps = conn.prepareStatement(sql);
17             System.out.println(ps);
18             for (int i = 0; i < values.length; i++) 
19                 ps.setObject(i + 1, values[i]);
20             
21             System.out.println(ps);
22             // 执行修改语句返回受影响的行数
23             int num = ps.executeUpdate();
24             System.out.println(num);
25          catch (SQLException e) 
26             e.printStackTrace();
27          finally 
28             // 关闭资源
29             if (ps != null) 
30                 try 
31                     ps.close();
32                  catch (SQLException e) 
33                     // TODO Auto-generated catch block
34                     e.printStackTrace();
35                 
36             
37         
38         return 0;
39     

将查询封装在一个方法里面 

 1 /**
 2      * 查询的方法
 3      * 
 4      * @param sql
 5      * @param values sql中?的值
 6      * @return 查询到的数据
 7      */
 8     public static List<Map<String, String>> query(String sql, Object[] values) 
 9         PreparedStatement ps = null;
10         ResultSet res = null;
11         List<Map<String, String>> list = new ArrayList<>();
12         getConnection();
13         try 
14             //创建语句对象
15             ps = conn.prepareStatement(sql);
16             //为ps中的?设置值
17             if (values != null && values.length > 0) 
18                 for (int i = 0; i < values.length; i++) 
19                     ps.setObject(i + 1, values[i]);
20                 
21             
22             // 执行查询操作
23             res = ps.executeQuery();
24             //获得结果集中所有的列的信息
25             ResultSetMetaData metaData = res.getMetaData();
26             // 获取到列的总数
27             int columnCount = metaData.getColumnCount();
28             while (res.next()) 
29                 // 创建Map集合对象,用于存储一行数据
30                 Map<String, String> map = new HashMap<>();
31                 for (int i = 0; i < columnCount; i++) 
32                     // 获得列名
33                     String columnNames = metaData.getColumnName(i + 1);
34                     // 获得列名指定的数据
35                     String columnValues = res.getString(columnNames);
36                     // 把数据放到map集合中
37                     map.put(columnNames, columnValues);
38                 
39                 list.add(map);
40             
41          catch (SQLException e) 
42             // TODO Auto-generated catch block
43             e.printStackTrace();
44          finally 
45             if (res != null) 
46                 try 
47                     res.close();
48                  catch (SQLException e) 
49                     // TODO Auto-generated catch block
50                     e.printStackTrace();
51                 
52             
53             if (ps != null) 
54                 try 
55                     ps.close();
56                  catch (SQLException e) 
57                     // TODO Auto-generated catch block
58                     e.printStackTrace();
59                 
60             
61         
62         return list;
63 
64     

完整代码

技术图片
  1   1 package com.newroad.xmlparsedbuitl;
  2   2 import java.sql.Connection;
  3   3 import java.sql.DriverManager;
  4   4 import java.sql.PreparedStatement;
  5   5 import java.sql.ResultSet;
  6   6 import java.sql.ResultSetMetaData;
  7   7 import java.sql.SQLException;
  8   8 import java.util.ArrayList;
  9   9 import java.util.HashMap;
 10  10 import java.util.List;
 11  11 import java.util.Map;
 12  12 import org.dom4j.Document;
 13  13 import org.dom4j.DocumentException;
 14  14 import org.dom4j.Element;
 15  15 import org.dom4j.io.SAXReader;
 16  16 
 17  17 public class DBUtil 
 18  18     private static String driver;
 19  19     private static String url;
 20  20     private static String user;
 21  21     private static String password;
 22  22     private static Connection conn = null;
 23  23 
 24  24     // 解析xml文件 获取驱动 用户名 密码 由于不需要每次加载可以写在静态方法中
 25  25     static 
 26  26         parseXmlInfo();
 27  27     
 28  28 
 29  29     // 创建连接
 30  30     public static void getConnection() 
 31  31         // 判断一下如果conn为空或者被关闭就开连接 节省资源
 32  32         try 
 33  33             if (conn == null || conn.isClosed()) 
 34  34                 // 加载驱动获取连接
 35  35                 Class.forName(driver);
 36  36                 conn = DriverManager.getConnection(url + "?characterEncoding=utf-8", user, password);
 37  37             
 38  38          catch (SQLException e) 
 39  39             e.printStackTrace();
 40  40          catch (ClassNotFoundException e) 
 41  41             // TODO Auto-generated catch block
 42  42             e.printStackTrace();
 43  43         
 44  44     
 45  45     /**
 46  46      * 修改数据的方法
 47  47      * 
 48  48      * @param sql
 49  49      * @param values
 50            sql语句中所有?的值
 51  51      * @return 0表示修改失败,其他表示修改成功
 52  52      */
 53  53     public static int update(String sql, Object[] values) 
 54  54         PreparedStatement ps = null;
 55  55         ResultSet rs = null;
 56  56         // 获取连接
 57  57         getConnection();
 58  58         try 
 59  59             // 创建prepareStatement
 60  60             ps = conn.prepareStatement(sql);
 61  61             System.out.println(ps);
 62  62             for (int i = 0; i < values.length; i++) 
 63  63                 ps.setObject(i + 1, values[i]);
 64  64             
 65  65             System.out.println(ps);
 66  66             // 执行修改语句返回受影响的行数
 67  67             int num = ps.executeUpdate();
 68  68             System.out.println(num);
 69  69          catch (SQLException e) 
 70  70             e.printStackTrace();
 71  71          finally 
 72  72             // 关闭资源
 73  73             if (ps != null) 
 74  74                 try 
 75  75                     ps.close();
 76  76                  catch (SQLException e) 
 77  77                     // TODO Auto-generated catch block
 78  78                     e.printStackTrace();
 79  79                 
 80  80             
 81  81         
 82  82         return 0;
 83  83     
 84  84 
 85  85     /**
 86  86      * 查询的方法
 87  87      * 
 88  88      * @param sql
 89  89      * @param values
 90  90      * @return 查询到的数据
 91  91      */
 92  92     public static List<Map<String, String>> query(String sql, Object[] values) 
 93  93         PreparedStatement ps = null;
 94  94         ResultSet res = null;
 95  95         List<Map<String, String>> list = new ArrayList<>();
 96  96         getConnection();
 97  97         try 
 98  98             //创建语句对象
 99  99             ps = conn.prepareStatement(sql);
100 100             //为ps中的?设置值
101 101             if (values != null && values.length > 0) 
102 102                 for (int i = 0; i < values.length; i++) 
103 103                     ps.setObject(i + 1, values[i]);
104 104                 
105 105             
106 106             // 执行查询操作
107 107             res = ps.executeQuery();
108 108             //获得结果集中所有的列的信息
109 109             ResultSetMetaData metaData = res.getMetaData();
110 110             // 获取到列的总数
111 111             int columnCount = metaData.getColumnCount();
112 112             while (res.next()) 
113 113                 // 创建Map集合对象,用于存储一行数据
114 114                 Map<String, String> map = new HashMap<>();
115 115                 for (int i = 0; i < columnCount; i++) 
116 116                     // 获得列名
117 117                     String columnNames = metaData.getColumnName(i + 1);
118 118                     // 获得列名指定的数据
119 119                     String columnValues = res.getString(columnNames);
120 120                     // 把数据放到map集合中
121 121                     map.put(columnNames, columnValues);
122 122                 
123 123                 list.add(map);
124 124             
125 125          catch (SQLException e) 
126 126             // TODO Auto-generated catch block
127 127             e.printStackTrace();
128 128          finally 
129 129             if (res != null) 
130 130                 try 
131 131                     res.close();
132 132                  catch (SQLException e) 
133 133                     // TODO Auto-generated catch block
134 134                     e.printStackTrace();
135 135                 
136 136             
137 137             if (ps != null) 
138 138                 try 
139 139                     ps.close();
140 140                  catch (SQLException e) 
141 141                     // TODO Auto-generated catch block
142 142                     e.printStackTrace();
143 143                 
144 144             
145 145         
146 146         return list;
147 147 
148 148     
149 149 
150 150     // 使用dom4j解析xml
151 151     private static void parseXmlInfo() 
152 152         // 创建saxreader对象
153 153         SAXReader saxReader = new SAXReader();
154 154         try 
155 155             // 加载xml文件
156 156             Document doc = saxReader.read(DBUtil.class.getResourceAsStream("/jdbc.xml"));
157 157             // 获得根元素
158 158             Element root = doc.getRootElement();
159 159             // 获得对应的元素的文本值
160 160             driver = root.elementText("driver");
161 161             url = root.elementText("url");
162 162             user = root.elementText("user");
163 163             password = root.elementText("password");
164 164 
165 165          catch (DocumentException e) 
166 166             // TODO Auto-generated catch block
167 167             e.printStackTrace();
168 168         
169 169     
170 170     /**
171 171      * 关闭资源的方法
172 172      */
173 173     public static void closeConnection() 
174 174         try 
175 175             if(conn != null && !conn.isClosed()) 
176 176                 conn.close();
177 177             
178 178          catch (SQLException e) 
179 179             // TODO Auto-generated catch block
180 180             e.printStackTrace();
181 181         
182 182     
183 183 
184 184 
DBUtil

 

java中xml解析(四种方法)

...DOC树的遍历也很耗时,对机器要求比较高。//step1:获得dom解析器工 查看详情

解析 XML 文件并保留有关行号的信息

】解析XML文件并保留有关行号的信息【英文标题】:ParsingXMLfilewithpreservinginformationaboutthelinenumber【发布时间】:2011-05-1915:16:56【问题描述】:我正在创建一个工具来分析一些XML文件(准确地说是XHTML文件)。这个工具的目的不仅... 查看详情

php通过xml报文方式,已第三方接口交互(发送xml,获取xml,并解析xml步骤)

   开发者端:发送请求,并接收结果<?php//下面的demo,实现的功能如下://1-开发者需要判断一个用户是否存在,去请求第三方接口。//2-与第三方接口的通信,是以xml格式传送数据。开发者把用户信息以xml格式发送给第... 查看详情

oracle解析xml节点信息并转换string类型

select xmltype(dataxml).extract(‘/data/sqr_mc/text()‘).getstringval() assqrmcfromt_ins_formdatawherebsnum=‘170215085821005401‘ 查看详情

python操作lxml库(基础篇)(代码片段)

...2、lxml库特点3、lxml库的安装二、基本使用1、lxml.etree2、解析HTML网页3、读取并解析HTML文件三、lxml使用流程1、 导入模块2、创建解析对象四、lxml库数据提取1、提取所有a标签内的文本信息2、获取所有href的属性值3、不匹配href=... 查看详情

微信小程序实现获取用户信息并存入数据库操作示例

微信小程序获取用户信息简单,但是在存入自己服务器数据库的过程中研究了一天多的时间,并且网上搜索不到该资源,故发出来供大家参考。index.js?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253Page(... 查看详情

android之dom解析xml

一.DOM解析方法介绍  DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOMAPI遍历XML树,检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。  Android完全支持DO... 查看详情

php通过xml报文格式的post请求方式,与第三方接口交互(发送xml,获取xml,并解析xml步骤)

开发者端:发送请求,并接收结果<?php//下面的demo,实现的功能如下://1-开发者需要判断一个用户是否存在,去请求第三方接口。//2-与第三方接口的通信,是以xml格式传送数据。开发者把用户信息以xml格式发送给第三方接口//... 查看详情

dom4j解析

XML解析概述 当将数据存储在XML后,我们就希望通过程序获得XML的内容。如果我们使用Java基础所学习的旧知识是可以完成的,不过你需要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。人们为不同问题提... 查看详情

xml解析(代码片段)

一、什么是XML?有什么用途  1、XML全名为可扩展标记语言(eXtensibleMarkupLanguage),是w3c组织的一个技术规范,具有严格的数据格式,主要作用是描述数据并集中于数据的内容。  2、XML的主要用途:    ①作为小型数据... 查看详情

javasexml解析技术的使用详解(代码片段)

文章目录XML解析技术XML解析技术介绍Dom4j解析XML文件Dom4j解析各个节点Dom4j解析案例实战XML解析技术XML解析技术介绍XML的数据作用是什么?最终需要怎样处理?作用:存储数据、做配置信息、进行数据传输。最终需要被程序进行读取&#x... 查看详情

msxml是啥东西?有啥用?

MSXML是什么东西?有什么用?MSXML是微软的XML语言解析器,用来解释XML语言的。其中的具体情况如下:1、MSXML主要用来执行或开发经由XML所设计的最新应用程序。就好像HTML文本下载到本地,浏览器会检查HTML的语法,解释HTML文本然后... 查看详情

详解java解析xml的四种方法(代码片段)

...网站文档http://www.w3.org获取更多信息。XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML... 查看详情

在 C# 中解析 XML 数据并显示到 ListBox

】在C#中解析XML数据并显示到ListBox【英文标题】:ParsingXMLdatainC#andshowintoListBox【发布时间】:2016-04-2100:38:25【问题描述】:我正在尝试使用VisualStudio解析C#中的XML文件并在ListBox中显示数据,但在处理嵌套的XML文件时我不知道如何... 查看详情

如何在php中解析soap xml响应并从字符串中获取信息

】如何在php中解析soapxml响应并从字符串中获取信息【英文标题】:Howtoparsesoapxmlresponseinphpandgettheinformationfromthestring【发布时间】:2016-05-0622:17:51【问题描述】:我在从SOAP响应中提取信息时遇到了一些问题。这是我得到的回复:&... 查看详情

python操作dom(待更)

...术Axml.etree.ElementTree模块实现了一个简单高效的API,用于解析和创建XML数据。XML是一种固有的分层数据格式,最自然的表示方法是使用树。ET(xml.etree.ElementTree)有两个类:ElementTree将整个XML文档表示为一个树,Element表示该树中的单... 查看详情

java代码用dom4j解析xml文件的简单操作

...2016/02/17目标:为telenor的ALUFemto接口写一个采集xml文件并解析出locationName标签里的值,然后更新到数据库中。从网上搜了下,有四种常用的解析xml的方式,包括DOM,JAXD,Dom4J,SAX(simpleapiforxml).我正好有Dom4j的jar包,就选择了Dom4j... 查看详情

hibernate总结

...使开发人员可以用更多精力进行对象方面的开发1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Tran 查看详情