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

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

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

     // 使用dom4j解析xml
private static void parseXmlInfo() {
// 创建saxreader对象
SAXReader saxReader = new SAXReader();
try {
// 加载xml文件
Document doc = saxReader.read(DBUtil.class.getResourceAsStream("/jdbc.xml"));
// 获得根元素
Element root = doc.getRootElement();
// 获得对应的元素的文本值
driver = root.elementText("driver");
url = root.elementText("url");
user = root.elementText("user");
password = root.elementText("password"); } catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

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

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

 /**
* 修改数据的方法
*
* @param sql
* @param values sql中所有?的值
*
* @return 0表示修改失败,其他表示修改成功
*/
public static int update(String sql, Object[] values) {
PreparedStatement ps = null;
ResultSet rs = null;
// 获取连接
getConnection();
try {
// 创建prepareStatement
ps = conn.prepareStatement(sql);
System.out.println(ps);
for (int i = 0; i < values.length; i++) {
ps.setObject(i + 1, values[i]);
}
System.out.println(ps);
// 执行修改语句返回受影响的行数
int num = ps.executeUpdate();
System.out.println(num);
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return 0;
}

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

 /**
* 查询的方法
*
* @param sql
* @param values sql中?的值
* @return 查询到的数据
*/
public static List<Map<String, String>> query(String sql, Object[] values) {
PreparedStatement ps = null;
ResultSet res = null;
List<Map<String, String>> list = new ArrayList<>();
getConnection();
try {
//创建语句对象
ps = conn.prepareStatement(sql);
//为ps中的?设置值
if (values != null && values.length > 0) {
for (int i = 0; i < values.length; i++) {
ps.setObject(i + 1, values[i]);
}
}
// 执行查询操作
res = ps.executeQuery();
//获得结果集中所有的列的信息
ResultSetMetaData metaData = res.getMetaData();
// 获取到列的总数
int columnCount = metaData.getColumnCount();
while (res.next()) {
// 创建Map集合对象,用于存储一行数据
Map<String, String> map = new HashMap<>();
for (int i = 0; i < columnCount; i++) {
// 获得列名
String columnNames = metaData.getColumnName(i + 1);
// 获得列名指定的数据
String columnValues = res.getString(columnNames);
// 把数据放到map集合中
map.put(columnNames, columnValues);
}
list.add(map);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (res != null) {
try {
res.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return list; }

完整代码

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

DBUtil

xml解析数据信息并实现DBManager操作mysql的更多相关文章

  1. IOS-网络(JSON解析数据与XML解析数据)

    一.JSON解析数据 // // VideoModel.h // IOS_0130_网络视频 // // Created by ma c on 16/1/30. // Copyright © 2016 ...

  2. 复习知识点:XML解析数据,JOSN解析数据,GET请求数据,POST请求数据

    GDataXMLDocument-XML解析 #pragma mark - ======== Dom XML解析 - (IBAction)domParserActionXML_Document:(id ...

  3. XML解析之DOM详解及与SAX解析方法的比较

    XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...

  4. 使用Dom解析器,操作XML里面的信息

    import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...

  5. iOS开发——XML/JSON数据解析

    NSJSONSerialization 接下来就正式开始.苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂. 首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要 ...

  6. (5)微信二次开发 之 XML格式数据解析

    1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...

  7. 关于iOS中几种第三方对XML/JSON数据解析的使用

    Json XML 大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式.一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特 ...

  8. Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  9. 大数据之路week04--day05(java XML解析)

    java解析XML的四种方式: XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不 ...

随机推荐

  1. linux下压缩与解压缩

    版权声明: https://blog.csdn.net/zdp072/article/details/27584773 [ tar具体解释: ] -c: 建立压缩档案 -x:解压 -t:查看内容 -r ...

  2. SQL Server 断开某个数据库所有连接(还原的时候需要)

    问题描述: SQL Server数据库备份还原后,在数据库名称后会出现“受限制访问”字样 解决办法: 右键点击数据库 -> 属性 -> 选项 -> 状态 -> 限制访问 -&g ...

  3. ES6新特性4:字符串的扩展

    本文摘自ECMAScript6入门,转载请注明出处. 一.ES5字符串函数 concat: 将两个或多个字符的文本组合起来,返回一个新的字符串. indexOf: 返回字符串中一个子串第一处出现的索引 ...

  4. atom / vscode (配置c++环境流程)

    最初主要是被这个炫酷的插件吸引了,这么打代码太特么有激情了 还有跳舞的初音姐姐哦!! 现附上一篇文章,这篇文章步骤讲得很详细了 http://blog.csdn.net/qq_36731677/art ...

  5. DB2创建表、操作表等常用命令

    转载:http://hi.baidu.com/ufobject/item/7fd03aeebf7be1266dabb881 一.创建库表 1.创建库 1).创建数据语句 CREATE DATABASE ...

  6. 阿里云服务器+宝塔环境+LNMP+tp5.1安装和调试

    1.首先肯定得有个阿里云服务器,楼主是用来自己测试用得,所以就买了个1年得突发性实例,虽然网上都说别买这种,不过个人测试还是没有多少要求得 2.买了服务器之前可以顺带买个域名,再顺带去备案一下,阿里云 ...

  7. Telnet模拟系统(Linux c)

    第3章详细设计和实现 3.1相关技术 1)TCP编程,主要包括socket()函数.bind()函数.listen()函数.recv()函数.send()函数以及客户端的connect()函数. 2) ...

  8. 【树形DP】洛谷P1352_没有上司的舞会

    本人第一篇Blog,初学树形DP,心情别样鸡冻... 好了废话不多说,我们来看看题目[传送门] 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是 ...

  9. PI接口开发之调java WS接口(转)

    java提供的WSDL:http://XXX.XXX.XXX.XX/XXXXXXXcrm/ws/financialStatementsService?wsdl 登陆PI,下载Enterprise Se ...

  10. 【转】SQL中的锁、脏读、不可重复的读及虚读

    原文:http://blog.csdn.net/wjeson/article/details/9382067 锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题 ...