• JAVA -- 把一个大的sql文件分割成多个小sql文件


    背景:

            今天从生产环境中导出了一些表的所有数据,想复制到测试环境,但是发现这个导出sql文件大小为280M,太大了,编辑工具或者数据库工具都打不开会卡死,于是想着,把这个大文件按不同的表数据分割成多个文件,再去执行语句

    操作:

            首先找到分割的点,因为导出的数据库sql文件是按表顺序导出的,每个表都是按创表语句+insert语句去排的,以下面为例,前面是创表语句,后面接insert语句。

    根据“DROP TABLE IF EXISTS `tablename`;”,去匹配DROP TABLE IF EXISTS 就能分割文件,按表名去分割这个大的sql文件

     

    代码:

    1. import java.io.*;
    2. public class testMain {
    3. public static String IN_FLIE = "D:\\数据库\\生产数据库\\txyx.sql";
    4. public static String OUT_FLIE_PATH = "D:\\数据库\\生产数据库\\";
    5. public static String splitValue = "DROP TABLE IF EXISTS";
    6. public static void main(String[] args) throws IOException {
    7. //读取被分割的文件
    8. File file = new File(IN_FLIE);
    9. if (!file.exists() || (!file.isFile())) {
    10. System.out.println("文件不存在");
    11. }
    12. //用字符流读取文件内容
    13. BufferedReader bufferedReader = new BufferedReader(
    14. new InputStreamReader(new FileInputStream(file), "UTF-8"));
    15. String bufStrLine = null;
    16. Writer writer = null ;
    17. //一行一行读取
    18. while ((bufStrLine = bufferedReader.readLine()) != null) {
    19. //读到存在对应标识字符串
    20. if (bufStrLine.contains(splitValue)){
    21. //不为空,则把上一个文件输出流关闭
    22. if (writer != null){
    23. writer.close();
    24. }
    25. //创建io输出流,通过分割改行数据获取文件名
    26. String fileName = OUT_FLIE_PATH+bufStrLine.split("`")[1]+".sql";
    27. writer = new FileWriter(fileName);
    28. System.out.println("创建文件"+fileName);
    29. }
    30. //写一行数据到输出文件
    31. if (writer != null){
    32. writer.write(bufStrLine+"\r\n");
    33. }
    34. }
    35. //关闭最后一个输出流
    36. if (writer != null){
    37. writer.close();
    38. }
    39. System.out.println("文件大小" + file.length());
    40. }
    41. }

    运行验证:

            

     

     

    结果:

            成功分割,每个文件大小都50M前后,可以在数据库工具中正常执行

  • 相关阅读:
    Mysql---第四篇
    Java中的ArrayList和LinkedList的区别
    小侃设计模式(十五)-命令模式
    xdebug 远程调试 vsCode
    MySQL 子查询使用方式
    0基础跟我学python---进阶篇(3)python中的ORM框架(1)
    麒麟系统开机忘记密码,密码重置
    【UniApp】-uni-app-动态计算字体大小(苹果计算器)
    如何在Visual Studio上创建项目并运行【超级详细】
    入门数据库Days7
  • 原文地址:https://blog.csdn.net/DGH2430284817/article/details/128198457