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

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

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


用于测试的 MySQL 数据库:game

查看表的定义

复制代码
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)
复制代码

查看表中的数据

复制代码
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)
复制代码

Java 工程结构:

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 文件:

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>
原文地址:https://www.cnblogs.com/Satu/p/10012686.html