1. 程式人生 > >xml解析數據信息並實現DBManager操作mysql

xml解析數據信息並實現DBManager操作mysql

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