JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

时间:2021-04-01 16:08:04

MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL)

相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并封装到 Javabean 对象中


用于测试的 MySQL 数据库:game

查看表的定义

JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中
mysql> DESC user;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(8) | NO | PRI | NULL | auto_increment |
| username | varchar(16) | NO | | NULL | |
| password | varchar(16) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

查看表中的数据

JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中
mysql> SELECT * FROM user;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | mk | 123 |
| 2 | seven | 456 |
| 3 | tutu | 789 |
| 4 | lan | 666 |
+----+----------+----------+
4 rows in set (0.00 sec)
JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

Java 工程结构:

JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

db.properties 文件中的内容:

mysqlDriver=com.mysql.jdbc.Driver
mysqlUrl=jdbc\:mysql\://localhost\:3306/game
mysqlUser=root
mysqlPassword=123456

DBUtil.java 文件中的内容:

  1 package com.mk.util;
2
3 import java.io.IOException;
4 import java.sql.Connection;
5 import java.sql.DriverManager;
6 import java.sql.PreparedStatement;
7 import java.sql.ResultSet;
8 import java.sql.SQLException;
9 import java.sql.Statement;
10 import java.util.Properties;
11
12 public class DBUtil {
13 static Properties properties = null; // 用于读取和处理资源文件中的信息
14 static { // 类加载的时候被执行一次
15 properties = new Properties();
16 try {
17 properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
18 } catch (IOException e) {
19 e.printStackTrace();
20 }
21 }
22
23 public static Connection getConnection() {
24 try {
25 // 加载 MySQL JDBC 驱动类
26 Class.forName(properties.getProperty("mysqlDriver"));
27 // 建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时!这是Connection对象管理的一个要点!)
28 // 真正开发中,为了提高效率,都会使用连接池来管理连接对象!
29 String mysqlUrl = properties.getProperty("mysqlUrl");
30 String mysqlUser = properties.getProperty("mysqlUser");
31 String mysqlPassword = properties.getProperty("mysqlPassword");
32 return DriverManager.getConnection(mysqlUrl, mysqlUser, mysqlPassword);
33 } catch (ClassNotFoundException e) {
34 e.printStackTrace();
35 return null;
36 } catch (SQLException e) {
37 e.printStackTrace();
38 return null;
39 }
40 }
41
42 public static PreparedStatement getPreparedStatement(Connection connection, String sql) {
43 try {
44 // 使用 PreparedStatement,防止 SQL 注入
45 return connection.prepareStatement(sql);
46 } catch (SQLException e) {
47 e.printStackTrace();
48 return null;
49 }
50 }
51
52 public static void close(Connection connection, Statement statement, ResultSet resultSet) {
53 if (resultSet != null) {
54 try {
55 resultSet.close();
56 } catch (SQLException e) {
57 e.printStackTrace();
58 }
59 }
60 if (statement != null) {
61 try {
62 statement.close();
63 } catch (SQLException e) {
64 e.printStackTrace();
65 }
66 }
67 if (connection != null) {
68 try {
69 connection.close();
70 } catch (SQLException e) {
71 e.printStackTrace();
72 }
73 }
74 }
75
76 public static void close(Connection connection) {
77 if (connection != null) {
78 try {
79 connection.close();
80 } catch (SQLException e) {
81 e.printStackTrace();
82 }
83 }
84 }
85
86 public static void close(Statement statement) {
87 if (statement != null) {
88 try {
89 statement.close();
90 } catch (SQLException e) {
91 e.printStackTrace();
92 }
93 }
94 }
95
96 public static void close(ResultSet resultSet) {
97 if (resultSet != null) {
98 try {
99 resultSet.close();
100 } catch (SQLException e) {
101 e.printStackTrace();
102 }
103 }
104 }
105 }

User.java 文件中的内容:

 1 package com.mk.pojo;
2
3 import java.io.Serializable;
4
5 public class User implements Serializable {
6 private int id;
7 private String username;
8 private String password;
9
10 public User() {
11
12 }
13
14 public User(int id, String username, String password) {
15 super();
16 this.id = id;
17 this.username = username;
18 this.password = password;
19 }
20
21 @Override
22 public String toString() {
23 return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
24 }
25
26 @Override
27 public int hashCode() {
28 final int prime = 31;
29 int result = 1;
30 result = prime * result + id;
31 result = prime * result + ((password == null) ? 0 : password.hashCode());
32 result = prime * result + ((username == null) ? 0 : username.hashCode());
33 return result;
34 }
35
36 @Override
37 public boolean equals(Object obj) {
38 if (this == obj)
39 return true;
40 if (obj == null)
41 return false;
42 if (getClass() != obj.getClass())
43 return false;
44 User other = (User) obj;
45 if (id != other.id)
46 return false;
47 if (password == null) {
48 if (other.password != null)
49 return false;
50 } else if (!password.equals(other.password))
51 return false;
52 if (username == null) {
53 if (other.username != null)
54 return false;
55 } else if (!username.equals(other.username))
56 return false;
57 return true;
58 }
59
60 public int getId() {
61 return id;
62 }
63
64 public void setId(int id) {
65 this.id = id;
66 }
67
68 public String getUsername() {
69 return username;
70 }
71
72 public void setUsername(String username) {
73 this.username = username;
74 }
75
76 public String getPassword() {
77 return password;
78 }
79
80 public void setPassword(String password) {
81 this.password = password;
82 }
83 }

Demo.java 文件中的内容:

  1 package com.mk;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.io.Writer;
7 import java.sql.Connection;
8 import java.sql.PreparedStatement;
9 import java.sql.ResultSet;
10 import java.sql.SQLException;
11 import java.text.SimpleDateFormat;
12 import java.util.ArrayList;
13 import java.util.Date;
14 import java.util.List;
15
16 import org.dom4j.Document;
17 import org.dom4j.DocumentHelper;
18 import org.dom4j.Element;
19 import org.dom4j.io.OutputFormat;
20 import org.dom4j.io.XMLWriter;
21
22 import com.mk.pojo.User;
23 import com.mk.util.DBUtil;
24
25 public class Demo {
26
27 public static void main(String[] args) {
28 List<User> list = selectAll();
29 if (list != null) {
30 writeUsers2xml(list);
31 }
32 }
33
34 private static void writeUsers2xml(List<User> list) {
35 // 创建 xml 文档对象
36 Document document = DocumentHelper.createDocument();
37 // 创建根元素
38 Element users = document.addElement("users");
39 // 为根元素添加子元素
40 for (User u : list) {
41 Element user = users.addElement("user").addAttribute("id", (u.getId() + ""));
42 user.addElement("username").addText(u.getUsername());
43 user.addElement("password").addText(u.getPassword());
44 }
45 // 将 xml 文档对象写到具体的 xml 文件中,文件名格式:xmlyyyyMMdd.xml,yyyyMMdd 是指年月日
46 // .1、指定输出格式
47 OutputFormat format = OutputFormat.createPrettyPrint();
48 // .2、输出 xml 文件
49 Writer writer = null;
50 XMLWriter xmlWriter = null;
51 try {
52 writer = new FileWriter(new File("Backup" + new SimpleDateFormat("yyyyMMdd").format(new Date()) + ".xml"));
53 xmlWriter = new XMLWriter(writer, format);
54 xmlWriter.write(document);
55 } catch (IOException e) {
56 e.printStackTrace();
57 } finally {
58 if (xmlWriter != null) {
59 try {
60 xmlWriter.close();
61 } catch (IOException e) {
62 e.printStackTrace();
63 }
64 }
65 if (writer != null) {
66 try {
67 writer.close();
68 } catch (IOException e) {
69 e.printStackTrace();
70 }
71 }
72 }
73
74 }
75
76 private static List<User> selectAll() {
77 List<User> list = new ArrayList<>();
78
79 // 查询语句
80 String sql = "SELECT * FROM user ORDER BY id";
81 Connection connection = DBUtil.getConnection();
82 PreparedStatement ps = DBUtil.getPreparedStatement(connection, sql);
83 ResultSet rs = null;
84 try {
85 // 返回查询结果
86 rs = ps.executeQuery();
87 while (rs.next()) {
88 User user = new User();
89 // 使用 User 对象封装查询到的数据
90 user.setId(rs.getInt("id"));
91 user.setUsername(rs.getString("username"));
92 user.setPassword(rs.getString("password"));
93 // 将 User 对象加入到 ArrayList 中
94 list.add(user);
95 }
96 } catch (SQLException e) {
97 e.printStackTrace();
98 return null;
99 } finally {
100 DBUtil.close(connection, ps, rs);
101 }
102 return list;
103 }
104 }

运行程序后,刷新(快捷键 F5) Java 工程目录,就可以看到备份的 xml 文件:

JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

xml 文件中的内容:

 1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <users>
4 <user id="1">
5 <username>mk</username>
6 <password>123</password>
7 </user>
8 <user id="2">
9 <username>seven</username>
10 <password>456</password>
11 </user>
12 <user id="3">
13 <username>tutu</username>
14 <password>789</password>
15 </user>
16 <user id="4">
17 <username>lan</username>
18 <password>666</password>
19 </user>
20 </users>