xml解析数据信息并实现DBManager操作mysql
先前一直都是用的直接用加载驱动 然后创建连接进行操作数据 如果我的数据库换了 那么要修改的地方也比较多 不利于维护 所以就想到了将所有配置连接信息都用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的更多相关文章
- IOS-网络(JSON解析数据与XML解析数据)
一.JSON解析数据 // // VideoModel.h // IOS_0130_网络视频 // // Created by ma c on 16/1/30. // Copyright © 2016 ...
- 复习知识点:XML解析数据,JOSN解析数据,GET请求数据,POST请求数据
GDataXMLDocument-XML解析 #pragma mark - ======== Dom XML解析 - (IBAction)domParserActionXML_Document:(id ...
- XML解析之DOM详解及与SAX解析方法的比较
XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...
- 使用Dom解析器,操作XML里面的信息
import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...
- iOS开发——XML/JSON数据解析
NSJSONSerialization 接下来就正式开始.苹果官方给出的解析方式是性能最优越的,虽然用起来稍显复杂. 首先我们在上面已经有了我希望得到的信息的网站的API给我们的URL,在OC中,我要 ...
- (5)微信二次开发 之 XML格式数据解析
1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...
- 关于iOS中几种第三方对XML/JSON数据解析的使用
Json XML 大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式.一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特 ...
- Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- 大数据之路week04--day05(java XML解析)
java解析XML的四种方式: XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不 ...
随机推荐
- JS 事件冒泡、捕获。学习记录
作为一个转行刚到公司的新人,任务不多,这一周任务全部消灭,闲暇的一天也别闲着,悄悄的看起了书.今天写一下JS的事件冒泡.捕获. 也是今天看的内容有点多了,有些消化不了,就随手记录一下.纯属自我理解,如 ...
- CSS3 Transform变形理解与应用
CSS3 Transform变形理解与应用 Transform:对元素进行变形:Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画.但只有两个关键贞.开 ...
- JAVA反射机制教程-获取类对象
1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...
- 【洛谷】【归并排序】P1908 逆序对
[题目描述:] 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是 ...
- kubernetes 认证授权
每个Kubernetes集群都有一个集群根证书颁发机构(CA). 集群中的组件通常使用CA来验证API server的证书,由API服务器验证kubelet客户端证书等.为了支持这一点,CA证书包被分 ...
- virtualbox+vagrant学习-2(command cli)-22-vagrant validate命令
Validate 格式: vagrant validate [options] 该命令用于验证你的Vagrantfile文件 userdeMacBook-Pro:~ user$ vagrant val ...
- Cannot find module 'webpack/lib/node/NodeTemplatePlugin' 问题原因和解决方案
当我配置了html-webpack-plugin 打包时报了这个错,查看了一下package.json发现没有webpack,说明使用了全局安装的webapck,导致的版本差异. 这里在本地安装web ...
- 集合之fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...
- Jmeter之post上传文件
上周五东西都收拾好了,然后被叫住加班,直接搞到凌晨一两点,原因是另一个项目的性能出了点问题.为此我抓包写了一下主业务流的接口,涉及到文件上传,记录一下吧. 一.创建线程组,添加各类组件 这个就不用说了 ...
- centos7 支持中文显示(转)
centos7 支持中文显示 - kingleoric - 博客园https://www.cnblogs.com/kingleoric/p/7517753.html http://www.linuxi ...