Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

xml解析数据信息并实现DBManager操作mysql

hengly94 2019-03-31 04:38:00 阅读数:208 评论数:0 点赞数:0 收藏数:0

 

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

 

版权声明
本文为[hengly94]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/hengly/p/10630864.html

支付宝红包,每日可领(支付宝免费1-2元支付红包)