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

 

先前一直都是用的直接用加載驅動 而後建立鏈接進行操做數據 若是個人數據庫換了 那麼要修改的地方也比較多 不利於維護 因此就想到了將全部配置鏈接信息都用xml封裝起來 以致於我每次都只要修改一下個人xml配置文件 不須要修改個人代碼 這也就有了下面的操做 將驅動 url 用戶名和密碼都寫到xml文件裏面 java

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 文件以後就須要來進行解析mysql

 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

將增刪改封裝到一個方法裏面 之後每次只須要寫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     }

將查詢封裝在一個方法裏面 dom

 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     }

完整代碼ide

  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
相關文章
相關標籤/搜索