Runtime.getRuntime().exec()参数问题 java导出mysql数据

		Process process = Runtime.getRuntime().exec(execCMD);
            int processComplete = process.waitFor();
            if (processComplete == 0) {
                logger.info("*************************备份成功**************************");
                vehicleRTLSService.deleteExtraInfo();            //删除过期 数据
            } else {
                throw new RuntimeException("备份数据库失败.");

java执行Runtime.getRuntime().exec()调用外部的程序或命令 (win调用cmd,linux调用控制台)

exec()有多个重载方法,这里只提两种exec(String) / exec(String[])

记得尽量调用exec(String[])方法

这里解释下原因,为何不用String字符串方式;
例如: String exportCMD = “mysqldump " + “-u**”+ " -p**” + “-h” + mysqlServer + “-P”+mysqlPort+" --databases **"–quick > " + savePath;
这种字符串经过exec(String) 后方法内会将String转换成String[]参数,但是转化时对于“ ”空格比较 管道符等敏感,造成解析后参数会出现问题,导出结果不准确,或者命令错误,不予执行等;

exec(String[])方法可以避免以上问题,但是当我按条件导出时出现了条件不予执行,只导出表结构的问题。
更改前

String[] execCMD = new String[] {"mysqldump", "-u**", "-p**", "-h" + mysqlServer ,"-P"+mysqlPort,"**","**"
                   ,"--where= ' TO_DAYS(NOW())-TO_DAYS(datetime)>31 ' " ,"-r" + savePath,"--quick","--single-transaction","-t"};

注意此where条件里条件两边带’'单引号,查询很多资料都说必须加。但是当执行的时候无论加单引号(‘’)与双引号(“”)都会造成只导出表结构,无表数据的问题;最后改成无符号后成功;

 String[] execCMD = new String[] {"mysqldump", "-u**", "-p**", "-h" + mysqlServer ,"-P"+mysqlPort,"**","**"
                   ,"--where=TO_DAYS(NOW())-TO_DAYS(datetime)>31" ,"-r" + savePath,"--quick","--single-transaction","-t"};
                                    0 预备知识1 不正确的调用exitValue2不正确的调用waitFor3 一种可接受的调用方式4 调用认为是可执行程序的时候容易发生的错误5 window执行的良好示例6 不良好的重定向命令输出7 良好的重定向输出示例8 总结9 问答0预备知识Runtime类是一个与JVM运行时环境有关的Singleton类,有以下几个值得注意的地方:0.1 Runtime.getRuntime()可以取得当...
五个常用的API:
1.Runtime.getRuntime().exec(String cmd)
直接输入一行cmd命令,例如:ipconfig /all 、java -version等
2.Runtime.getRuntime().exec(String [] cmd)
将命令分开输入,例如new String[] {“java”, “-version”}
3.getInputStream();
获得输入流
4.getErrorStrea
                                    /*** @param cmdStr* @return*/public static void exec(String cmdStr)throws IOException {//�����ʽ��ִ�е�exe Ŀ¼ ��"cmd.exe"," dir"// String cmd = "cmd /c start C:/WSCA-ENU-06-12/setpass...
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import 
                                    自己学习Runtime.getRuntime().exec()之后明白其用法,但是总结不出它的功能,在查阅网上资料找到一个比较通俗易懂且全面的答案:在java中,RunTime.getRuntime().exec()实现了调用服务器命令脚本来执行功能需要。
如果我们想在500秒后使电脑关机则需要在运行中输入  cmd  ,打开命令弹框中输入:
//添加一个60S后自动关闭计算机的计划。
shutdown -s -t 500
通过Runtime.getRuntime().exec()我们可以这样写
                                    -- dump 导出备份 并压缩
mysqldump -h -u root -p –password tablename | gzip > /usr/local/db_backup/tablename-`date +%Y%m%d%H%M%S`.sql.gz
-- 解压
gzip -d tablename-20220xxxxx0000.sql.gz 
-- 导入数据 
mysql -h localhost -p3306 -uroot –password tablename < /usr/.
                                    问题:在Java中使用Runtime.getRuntime().exec()启动一个进程,发现该进程成功启动,但无法获得该进程的打印输出,网上浏览一番,发现一方案,经验证可行,整理一下贴出来备忘。
*Main
public class StreamOutputTest{
public static void main(String[] args) 
                                    利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令。MySql导出数据库的命令如下:Sql代码mysqldump-uusername-ppassword-hhost-PportexportDatabaseName>exportPath利用Java调用命令窗口执行命令来进行MySql导入数据库一般分三步走:第一步:登录Mysql...