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

先前一直都是用的直接用加载驱动 然后创建连接进行操作数据 如果我的数据库换了 那么要修改的地方也比较多 不利于维护 所以就想到了将所有配置连接信息都用xml封装起来 以至于我每次都只要修改一下我的xml配置文件 不需要修改我的代码 这也就有了下面的操作 将驱动 url 用户名和密码都写到xml文件里面

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 com.mysql.jdbc.Driver

4 jdbc:mysql://localhost:3306/employee

5 root

6 root

7

有了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> query(String sql, Object[] values) {

9 PreparedStatement ps = null;

10 ResultSet res = null;

11 List> 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 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 }

完整代码

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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> query(String sql, Object[] values) {

93 93 PreparedStatement ps = null;

94 94 ResultSet res = null;

95 95 List> 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 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,ps,mysql,printStackTrace,DBManager,values,sql,catch,null

来源: https://www.cnblogs.com/hengly/p/10630864.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值