Java如何导出数据库中的所有数据表到指定文件夹

 更新时间:2023年06月01日 15:25:46   作者:_不吃猫的鱼_  
这篇文章主要介绍了Java导出数据库中的所有数据表到指定文件夹,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Java导出数据库中的所有数据表到指定文件夹

package com.test.util;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.*;
public class ExportData {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "password";
        String outputFolder = "D:\\backups\\";
        String query = "SHOW TABLES";
        try (Connection con = DriverManager.getConnection(url, user, password);
             Statement stmt = con.createStatement();
             ResultSet rs = stmt.executeQuery(query)) {
            while (rs.next()) {
                String tableName = rs.getString(1);
                System.out.println(tableName);
                String sql = generateTableSQL(con, tableName);
                writeToFile(outputFolder + tableName + ".sql", sql);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    private static String generateTableSQL(Connection conn, String tableName) throws SQLException {
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName);
        StringBuilder sb = new StringBuilder();
        sb.append("DROP TABLE IF EXISTS " + tableName + ";\n");
        sb.append("CREATE TABLE " + tableName + " (\n");
        int columnCount = rs.getMetaData().getColumnCount();
        for (int i = 1; i <= columnCount; i++) {
            String columnName = rs.getMetaData().getColumnName(i);
            String columnType = rs.getMetaData().getColumnTypeName(i);
            sb.append("  " + columnName + " " + columnType);
            if (i < columnCount) {
                sb.append(",");
            }
            sb.append("\n");
        }
        sb.append(");\n");
        while (rs.next()) {
            sb.append("INSERT INTO " + tableName + " VALUES (");
            for (int i = 1; i <= columnCount; i++) {
                Object value = rs.getObject(i);
                if (value == null) {
                    sb.append("NULL");
                } else if (value instanceof Number) {
                    sb.append(value);
                } else {
                    sb.append("'" + value.toString().replaceAll("'", "''") + "'");
                }
                if (i < columnCount) {
                    sb.append(",");
                }
            }
            sb.append(");\n");
        }
        rs.close();
        stmt.close();
        return sb.toString();
    }
    private static void writeToFile(String fileName, String content) {
        try {
            FileWriter writer = new FileWriter(new File(fileName));
            writer.write(content);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Java实现从数据库导出大量数据记录并保存到文件的方法

数据库脚本:

-- Table "t_test" DDL
CREATE TABLE `t_test` ( 
`id` int(11) NOT NULL AUTO_INCREMENT, 
`title` varchar(255) DEFAULT NULL, 
`createTime` bigint(20) DEFAULT NULL, 
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

代码:

package com.yanek.test; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
public class TestDB { 
 public static void main(String[] args) { 
  Test(); // 生成测试数据 
  //Exp(); 
  //Exp(0); 
  //System.out.println(readText("/opt/id.txt")); 
 } 
 /** 
  * 导出数据 
  */ 
  public static void Exp() { 
   Connection Conn=null; 
   try { 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/testcms?characterEncoding=GBK"; 
    String jdbcUsername = "root"; 
    String jdbcPassword = "root"; 
    Conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword); 
    System.out.println("conn"+Conn); 
    Exp(Conn); 
   } catch (SQLException e) { 
    e.printStackTrace(); 
   } 
   catch (InstantiationException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } catch (IllegalAccessException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } catch (ClassNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
   finally 
   { 
    try { 
     Conn.close(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
   } 
  } 
  public static void Exp(int startid) { 
   Connection Conn=null; 
   try { 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/testcms?characterEncoding=GBK"; 
    String jdbcUsername = "root"; 
    String jdbcPassword = "root"; 
    Conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword); 
    System.out.println("conn"+Conn); 
    Exp(Conn,startid); 
   } catch (SQLException e) { 
    e.printStackTrace(); 
   } 
   catch (InstantiationException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } catch (IllegalAccessException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } catch (ClassNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
   finally 
   { 
    try { 
     Conn.close(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
   } 
  } 
  /** 
  * 导出从startid开始的数据 
  * @param conn 
  * @param start_id 
  */ 
  public static void Exp(Connection conn,int start_id) { 
   int counter = 0; 
   int startid=start_id; 
   boolean flag = true; 
   while (flag) { 
    flag = false; 
    String Sql = "SELECT * FROM t_test WHERE id>" 
      + startid + " order by id asc LIMIT 50"; 
    System.out.println("sql===" + Sql); 
    try { 
     Statement stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery(Sql); 
      while (rs.next()) { 
       flag = true; 
       int id = rs.getInt("id"); 
       String title = rs.getString("title"); 
       startid = id ; 
       counter++; 
       writeContent(counter+"--id--"+id+"--title-"+title+"\r\n", "/opt/","log.txt",true); 
       System.out.println("i="+counter+"--id--"+id+"--title-"+title); 
      } 
     rs.close(); 
     stmt.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
   } 
   writeContent(""+startid, "/opt/","id.txt",false); 
  } 
  /** 
  * 导出一小时内的数据 
  * @param conn 
  */ 
  public static void Exp(Connection conn) { 
   int counter = 0; 
   //一小时内的数据 
   Long timestamp = System.currentTimeMillis() - (60 * 60 * 1000); 
   boolean flag = true; 
   while (flag) { 
    flag = false; 
    String Sql = "SELECT * FROM t_test WHERE createTime>" 
      + timestamp + " LIMIT 50"; 
    System.out.println("sql===" + Sql); 
    try { 
     Statement stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery(Sql); 
     while (rs.next()) { 
      flag = true; 
      int id = rs.getInt("id"); 
      String title = rs.getString("title"); 
      Long lastmodifytime = rs.getLong("createTime"); 
      timestamp = lastmodifytime; 
      counter++; 
      System.out.println("i="+counter+"--id--"+id+"--title-"+title); 
     } 
     rs.close(); 
     stmt.close(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
   } 
  } 
  public static void Test() { 
   Connection Conn=null; 
   try { 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/testcms?characterEncoding=GBK"; 
    String jdbcUsername = "root"; 
    String jdbcPassword = "root"; 
    Conn = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword); 
    System.out.println("conn"+Conn); 
    for(int i=1;i<=10000;i++) 
    { 
     add(Conn,"testTitle"+i+"-"+System.currentTimeMillis()); 
    } 
   } catch (SQLException e) { 
    e.printStackTrace(); 
   } 
   catch (InstantiationException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } catch (IllegalAccessException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } catch (ClassNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
   finally 
   { 
    try { 
     Conn.close(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
   } 
  } 
  public static void add(Connection conn,String title) 
  { 
   PreparedStatement pstmt = null; 
   String insert_sql = "insert into t_test(title,createTime) values (?,?)"; 
   System.out.println("sql="+insert_sql); 
   try { 
    pstmt = conn.prepareStatement(insert_sql); 
    pstmt.setString(1,title); 
    pstmt.setLong(2,System.currentTimeMillis()); 
    int ret = pstmt.executeUpdate(); 
   } catch (SQLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
   finally{ 
    try { 
     pstmt.close(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  
   } 
  } 
  /** 
   * 写入内容到文件 
   * 
   * @param number 
   * @param filename 
   * @return 
   */ 
  public static boolean writeContent(String c, String dirname,String filename,boolean isAppend) { 
   File f=new File(dirname); 
   if (!f.exists()) 
   { 
     f.mkdirs(); 
   } 
   try { 
    FileOutputStream fos = new FileOutputStream( dirname+File.separator+filename,isAppend); 
    OutputStreamWriter writer = new OutputStreamWriter(fos); 
    writer.write(c); 
    writer.close(); 
    fos.close(); 
   } catch (IOException e) { 
    e.printStackTrace(); 
    return false; 
   } 
   return true; 
  } 
  /** 
   * 从文件读取内容 
   * 
   * @param filename 
   * @return 
   */ 
  public static String readText(String filename) { 
   String content = ""; 
   try { 
    File file = new File(filename); 
    if (file.exists()) { 
     FileReader fr = new FileReader(file); 
     BufferedReader br = new BufferedReader(fr); 
     String str = ""; 
     String newline = ""; 
     while ((str = br.readLine()) != null) { 
      content += newline + str; 
      newline = "\n"; 
     } 
     br.close(); 
     fr.close(); 
    } 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } 
   return content; 
  } 
}

基本思想: 就是通过记录开始记录id,执行多次sql来处理. 由于大数据量所以不能使用一条sql语句来输出.否则会内存不足导致错误.

主要用途: 可以使用在做接口开发时,给第三方提供数据增量输出的场景使用.

到此这篇关于Java导出数据库中的所有数据表到指定文件夹的文章就介绍到这了,更多相关java导出数据库数据表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot之自定义全局异常处理的实现

    Springboot之自定义全局异常处理的实现

    这篇文章主要介绍了Springboot之自定义全局异常处理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Java面试题冲刺第三十天--数据库(6)

    Java面试题冲刺第三十天--数据库(6)

    这篇文章主要为大家分享了最有价值的三道关于数据库的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 全面理解Java类和对象

    全面理解Java类和对象

    下面小编就为大家带来一篇全面理解Java类和对象。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • MyBatis-Plus+Druid配置及应用详解

    MyBatis-Plus+Druid配置及应用详解

    这篇文章主要介绍了MyBatis-Plus+Druid配置及应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Spring入门配置和DL依赖注入实现图解

    Spring入门配置和DL依赖注入实现图解

    这篇文章主要介绍了Spring入门配置和DL依赖注入实现图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Spring Lifecycle的使用小结

    Spring Lifecycle的使用小结

    这篇文章主要介绍了Spring Lifecycle的使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 聊聊Kotlin 中 lateinit 和 lazy 的原理区别

    聊聊Kotlin 中 lateinit 和 lazy 的原理区别

    使用 Kotlin 进行开发,对于 latelinit 和 lazy 肯定不陌生。但其原理上的区别,可能鲜少了解过,借着本篇文章普及下这方面的知识,感兴趣的朋友一起看看吧
    2022-07-07
  • Spring Boot 把配置文件和日志文件放到jar外部

    Spring Boot 把配置文件和日志文件放到jar外部

    如果不想使用默认的application.properties,而想将属性文件放到jar包外面,怎么做呢?下面小编给大家带来了两种方法解决Spring Boot 把配置文件和日志文件放到jar外部问题,感兴趣的朋友一起看看吧
    2018-02-02
  • Java异常处理原理与用法实例分析

    Java异常处理原理与用法实例分析

    这篇文章主要介绍了Java异常处理原理与用法,结合实例形式分析了Java异常处理相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • 一文教会你如何搭建vue+springboot项目

    一文教会你如何搭建vue+springboot项目

    最近在捣鼓 SpringBoot 与 Vue 整合的项目,所以下面这篇文章主要给大家介绍了关于如何通过一篇文章教会你搭建vue+springboot项目,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05

最新评论