先前一直都是用的直接用加载驱动 然后创建连接进行操作数据 如果我的数据库换了 那么要修改的地方也比较多 不利于维护 所以就想到了将所有配置连接信息都用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. python第五课——流程控制语句

    流程控制语句: 分类: 1).顺序结构 2).判断结构解析:如果...否则... 3).循环结构 1.判断结构: 格式分类:三种格式 格式一: ① if 条件表达式: 语句块 ② 执行流程: 计算机会 ...

  2. 25个增强iOS应用程序性能的提示和技巧 — 中级篇

    本文由破船译自:raywenderlich 转载请注明出处:BeyondVincent的博客 _____________ 在开发iOS应用程序时.让程序具有良好的性能是非常关键的.这也是用户所期望的. ...

  3. Day2 Spring初识(二)

    Bean的实例化 bean实例化方式有3种:默认构造.静态工厂.实例工厂 默认构造 调用无参构造, 属性+setter User.java package entity; public class U ...

  4. 【node.js】模块系统、函数

    为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩 ...

  5. C#调试含有源代码的动态链接库遇见there is no source code available for the current location提示时的解决方案

    C#调试含有源代码的动态链接库遇见there is no source code available for the current location提示时的解决方案: 1.首先试最常规的方法:Cle ...

  6. windows7使用Sphinx+PHP+MySQL详细介绍

    安装(Windows) 1.官方下载 Sphinx下载地址: 下载 2.解压并重命名 此处下载版本为3.0.3,将 sphinx 文件夹命名为sphinx 3.文件夹目录介绍 sphinx --api ...

  7. P1070 道路游戏

    题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...

  8. C++中关于配置文件的问题

    眼下本人考虑到部门配置文件较多,所以想写个配置文件检測程序. 眼下大致的思路例如以下三部分; 1, 读取配置文件的内容(*.ini). 查找配置文件,代码例如以下 void CDataBaseDlg: ...

  9. 【vue】如何在 Vue-cli 创建的项目中引入iView

    根据vue项目的搭建教程,一下记录下如何在Vue-cli创建的项目中引入iView. 1)安装iView,在项目下 cnpm install  iview  --save 2 ) 在 webpack ...

  10. iOS蓝牙APP常驻后台

    iOS蓝牙类APP常驻后台的实现方法,经过在苹果开发者论坛询问,以及查看苹果开发者文档,最后得出正确的方法为: 1.设置plist,蓝牙权限 2.到target-capabilities-backgr ...