Java代码导出数据库百万数据生成sql脚本

2022-09-10 09:19:25

Java代码查询数据生成update更新sql

一、查询数据库数据

/**
	* 导入查询数据的接口
	**/@AutowiredprivateDataMapper dataMapper;/**
     * 编写单元测试查询数据库数据
     * @author douglas
     * @date 2022/5/10 18:19
     * @param
     * @return void
     **/@TestpublicvoidexportData(){//处理开始时间long startTime=System.currentTimeMillis();//1.根据条件分页查询mysql符合条件的数据//1.1获取查询总数量数量//1.2DataQo构建查询数据的入参finallong count= dataMapper.count(DataQo.builder().status(0).personCoune(0).build());//2.1定义每次查询数量finalint sizePer=10000;//2.2计算需要查询的次数(向上取整,15.3次==16次)int totalNumber=(int)Math.ceil(newBigDecimal(count).divide(newBigDecimal(sizePer)).doubleValue());//3.循环遍历查询数据for(int i=1; i<= totalNumber; i++){//3.1计算分页每次开始的条数finalInteger offset= sizePer*(i-1);//3.2查询数据库数据List<DataPO> dataPOs= dataMapper.listData(DataQo.builder().status(0).personCoune(0).offset(offset).limit(sizePer).build());//3.2过滤数据中的code字段值收集为list集合List<String> codeList= dataPOs.stream().map(po-> po.getCode()).collect(Collectors.toList());//3.3调用生成sql拼接方法generateSqlString(i,codeList.parallelStream());}//处理结束时间long endTime=System.currentTimeMillis();System.out.println("【输出sql文件总耗时:】"+(endTime- startTime)/1000+"秒");}

二、动态拼接sql字符串

/**
     * 拼接sql
     * @author douglas
     * @date 2022/5/11 9:18
     * @param
     * @return void
     **/privatevoidgenerateSqlString(int i,Stream<String> codeStream){//1.定义需要输出的sqlfinalString sql="update 表名 set status = 1 where code in (";StringBuffer updateSql=newStringBuffer();
        updateSql.append(sql);//2.拼接sql
        codeStream.forEach(t->{
            updateSql.append("'").append(t).append("'").append(",");});//3.最后一个字段替换为')'
        updateSql.setCharAt(updateSql.length()-1,')');
        updateSql.append(";");System.out.println(updateSql.toString());//4.调用输出sql文件的流方法(一个sql一个文件)//generateSqlFile(i,updateSql.toString());//5.所有的sql输出到一个文件(流追加的方式)  4与5选其一即可generateSqlOneFile(updateSql.toString());}

三、生成sql文件并输出(一个sql一个文件)

/**
     * 生成sql文件
     * @author douglas
     * @date 2022/5/11 9:38
     * @param
     * @return void
     **/privatevoidgenerateSqlFile(int i,String updateSql){//1.定义文件名称(这里是动态生成文件名,一条sql一个文件)finalString fileName="自定义"+ i+".sql";//2.定义文件输出路径finalString filePath="D:/sqlFile/";File directory=newFile(filePath);if(!directory.exists()){
            directory.mkdirs();}//3.创建输出流(jdk7后如下方式会自动关流)try(FileOutputStream fos=newFileOutputStream(filePath+ fileName)){
            fos.write(updateSql.getBytes());}catch(Exception e){
            e.printStackTrace();}}

四、输出sql文件(以追加的方式写入一个sql文件)

/**
     * 输出一个sql文件
     * @author douglas
     * @date 2022/5/11 12:26
     * @param
     * @return void
     **/privatevoidgenerateSqlOneFile(String updateSql){//1.定义文件名称finalString fileName="自定义.sql";//2.定义文件输出路径finalString filePath="D:/sqlFile/";File directory=newFile(filePath);if(!directory.exists()){
            directory.mkdirs();}//3.遍历集合以追加的方式输出;追加多配一个参数 truetry(FileOutputStream fos=newFileOutputStream(filePath+ fileName,true)){
                fos.write(updateSql.getBytes());//3.1推荐使用,具有良好的跨平台性,换行符String newLine=System.getProperty("line.separator");
                fos.write(newLine.getBytes());
                fos.flush();}catch(Exception e){
                e.printStackTrace();}}

【总结】三步完成使用java生成sql文件,记得收藏哈。

  • 作者:以梦为馬Douglas
  • 原文链接:https://blog.csdn.net/qq_42445425/article/details/124705867
    更新时间:2022-09-10 09:19:25