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在不同的语言环境中解析方式都是一样的,只不过实现的语法不 ...
随机推荐
- ubuntu 12.04 eclipse增加桌面快捷方式
1.创建桌面启动器(编辑/usr/share/applications/eclipse.desktop) [Desktop Entry] Encoding=UTF-8 Name=eclipse Com ...
- markdownpad 2 pro版本 注册码
注册email: www.zixue.it 注册码: 4vuvQFtGkF0oH7by922v75FtaUGq7niFveCKDxqC2KSqYTfaSGzxzxKQXNhc2BG51N9URrF7 ...
- 【转】说说Android中的style和theme
最近在做软件从2.3到4.0的改变的一些工作,其中涉及了一些style和theme相关的东西.上网上查了一些东西,这个一并说说.关于android中style和theme的基本使用,这里就不再赘述了, ...
- PHP学习笔记一:谁动了你的mail(),PHP?
PHP编写邮件发送的函数时候,会出现一个很奇怪的问题,那就是: Warning: mail(): Failed to connect to mailserver at "localhost& ...
- js之radio应用实例
radio和checkbox还有select,可谓是前后端常用三剑客啊!特别是checkbox和select,关于这两个今天不讲,因为在下面这几篇文章,我已经比较详细的讲解了. SpringMVC之a ...
- ubuntu16.04安装oracle常见问题
报错信息: Err:2 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 libdrm2 amd64 2.4.83-1~16. ...
- Google 历年笔试面试30题
1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12(1).设计一个函数void g ...
- Linux开机自启动脚本
将需要开机自启动的脚本命令写在文件/etc/rc.d/rc.local中即可. 比如需要开机自启动MySql和Apache,则在/etc/rc.d/rc.local文件尾部加入两行命令: system ...
- iview的Affix插件遇到滚动时候的bug处理方法
最近有个需求,是用vue做的页面,其中嵌入了一个tinymce编辑器,编辑器设置了自动调整高度,也就是说编辑器中内容越多,高度就会自动撑高 我们需要再页面最下方放一个保存按钮,保存按钮必须固定在屏幕下 ...
- 大数据调错系列之:自己总结的myeclipse连接hadoop会出现的问题
在我们学习或者工作中开始hadoop程序的时候,往往会遇到一个问题,我们写好的程序需要打成包放在集群中运行,这无形中在浪费我们的时间,因为程序可以需要不断的调试,然后把最终程序放在集群中即可.为了解决 ...