背??景最近项目中加入了一些导出功能。有些功能需要多表查询才能满足要求,有些数据只是单表查询。在此之前,我想到了两种解决方案。第一种是通过EasyExcle查询数据并写入文件,另一种是使用MySQL自带的导出功能。但是我在尝试第二个选项时遇到了一些问题,如下所述。问题在导出单表的过程中,我使用了MySQL自带的命令来完成。即通过代码中的字符串拼接命令。例如:即使这个语句被Java程序调用,仍然会执行失败。失败的原因有两个:通过Java代码调用命令会导致程序卡死,导致后续程序无法执行,需要手动处理,需要告诉操作系统这是不是字符串而是解决importjava.io.*;/***@description:*@author:582895699@qq.com*@time:2020/11/2611:17PM*/publicclassTest{publicstaticvoidmain(String[]args){executeCommand();}publicstaticvoidexecuteCommand(){StringBuilderstringBuilder=newStringBuilder();stringBuilder.append("mysql-uroot-proot-Dtest-e'select*fromgoodswhereid=1'");stringBuilder.append(">");stringBuilder.append("/tmp/20201128.csv");//告诉操作系统它不是字符串,而是命令String[]command={"/bin/bash","-c",stringBuilder.toString()};尝试{Processprocess=Runtime.getRuntime().exec(command);printMessage(process.getInputStream());printMessage(process.getErrorStream());//等待命令完成process.waitFor();}catch(IOException|InterruptedExceptione){e.printStackTrace();}}/***启动另一个线程输出错误流**@paraminput*/privatestaticvoidprintMessage(finalInputStreaminput){newThread(()->{Readerreader=newInputStreamReader(input);BufferedReaderbf=newBufferedReader(reader);Stringline=null;try{while((line=bf.readLine())!=null){System.out.println(line);}}catch(IOExceptione){e.printStackTrace();}})。开始();}}有问题欢迎指正
