xml解析數據信息並實現DBManager操作mysql
阿新 • • 發佈:2019-03-31
dom4j解析 mysql 影響 splay add 使用 set isp ive
先前一直都是用的直接用加載驅動 然後創建連接進行操作數據 如果我的數據庫換了 那麽要修改的地方也比較多 不利於維護 所以就想到了將所有配置連接信息都用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
xml解析數據信息並實現DBManager操作mysql