文档章节

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

o
 osc_w9s1w4o0
发布于 2019/03/31 12:38
字数 1726
阅读 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

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Android 牛逼哄哄的快速开发框架AndroidOne,秒杀最火的Xutils

一个牛逼哄哄的Android框架One github地址https://github.com/devinhu/androidone One框架能帮您带来什么? One框架分为两个项目,OneCore为核心工程,androidOne为演示项目,依赖oneCore O...

androidside
2015/12/07
139
0
xutils使用手册(二)——数据库

Xutils使用手册 Xutils对数据库的增删改查 在上一篇博客中我们讲到了怎么在Android Studio环境中添加xutils依赖,这里我们通过xutils来对数据库进行增删改查 一、初始化数据库 在MainApplica...

陈小默
2016/05/16
288
0
JDBC连接池 配置

一、数据源 连接信息 写在 db.properties 文件中 1.db.properties 2.工具类JDBCUtils.java 二、数据源 连接信息 配置在Tomcat服务器中的 server.xml中。 1、配置Tomcat服务器中的数据源连接信...

allure_07
2016/05/23
6
0
从Mac安装Mysql到Xcode连接Navicat

Mysql服务安装 tsun.com Snip20170616_51.png 下载地址https://dev.mysql.com/downloads/mysql/ Snip20170616_52.png mysql下载地址建议选择dmg安装包,不要选择压缩包,因为压缩包需要自己手...

osc_yfkp2j0l
2018/02/08
6
0
Android 如何导入已有的外部数据库

我们平时见到的android数据库操作一般都是在程序开始时创建一个空的数据库,我们然后在进行相关操作。这个我们就比较好做了,因为这个数据库是我们一开始就跟着这个应用走的,那么我们有的时...

长平狐
2012/08/21
770
1

没有更多内容

加载失败,请刷新页面

加载更多

263. Ugly Number

题目: 263. Ugly Number 题目地址:https://leetcode.com/problems/ugly-number/ Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers......

JiaMing
23分钟前
34
0
HCIA_ARP01

ARP(地址解析协议) eNSP 常用路由器:AR2220 常用交换机:S5700、S3700 常用终端:PC、MCS(主播服务器) 设备连线:Copper(以太网用到的双绞线)、Serial(串口线,2SA接口)、Auto(自动连...

创业789
26分钟前
13
0
如何在Rails 4中使用问题 - How to use concerns in Rails 4

问题: The default Rails 4 project generator now creates the directory "concerns" under controllers and models. 默认的Rails 4项目生成器现在在控制器和模型下创建目录“Concer”。 ......

fyin1314
30分钟前
19
0
【LeetCode】 57 括号生成

题目: 解题思路: https://leetcode-cn.com/problems/generate-parentheses/solution/hui-su-suan-fa-by-liweiwei1419/ 代码: import java.util.ArrayList;import java.util.List;publ......

JaneRoad
昨天
8
0
度小满上线“推有钱”贷款推广平台,合伙人直推佣金为贷款金额的2.5%

来源 | 镭射财经 作者 | 黄老邪 2020年,蓬勃发展的消金行业受到新冠肺炎疫情的冲击,用户增长放缓、逾期率上升成为共性问题。但疫情或许只是导火索,对于消金行业来说,用户增长红利的消退,...

镭射财经
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部