zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Python常见问题
    经典SQL语句大全(转)
    VMware ESX常用命令
    每天一个linux命令(目录)
    Linux 技巧:让进程在后台可靠运行的几种方法(转)
    软件测试随手记(转)
    linux下查看磁盘空间
    MQ5.3在redhat9上的安装
    我的MQ笔记
    RedHat Linux下MQ安装步骤及MQ常用命令
  • 原文地址:https://www.cnblogs.com/Satu/p/10012686.html
Copyright © 2011-2022 走看看