zoukankan      html  css  js  c++  java
  • xml解析数据信息并实现DBManager操作mysql

     

    先前一直都是用的直接用加载驱动 然后创建连接进行操作数据 如果我的数据库换了 那么要修改的地方也比较多 不利于维护 所以就想到了将所有配置连接信息都用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
  • 相关阅读:
    eclipse和jdk版本对应问题
    2017第49周四黑珍珠的价值
    如何写python插件、包,放到pypi上供其他人使用
    zerorpc的安装
    httplib 和 httplib2区别之 gzip解压
    mac下报错 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
    使用zerorpc踩的第一个坑:
    Jmeter Summariser report及其可视化
    sublime快捷键设置
    来,来,来,哥哥告诉你一个把文件搞大的方法
  • 原文地址:https://www.cnblogs.com/hengly/p/10630864.html
Copyright © 2011-2022 走看看