最近在使用java保存数据库文件时,遇到一个问题;这里先上代码:
new Thread(new Runnable() {
@Override
public void run() {
try {
String sFilepath=GConst.getSysEnv("EV_INSTALL_PATH")+"/Utilities/mysql/historySql_"+sPort;
GConst.mkdir(sFilepath);
String sFileName = sPort+"-"+new SimpleDateFormat("yyyyMMdd_hhmmss").format(new Date().getTime())+"_sql.sql";
File file = new File(sFilepath+"/"+sFileName);
file.createNewFile();
String msMysqlDump = "mysqldump -uevaadmin -p'evaDKS579<>?' evcfgdb"+sPort+" > "+sFilepath+"/"+sFileName+"";
Process process = Runtime.getRuntime().exec(msMysqlDump);
process.waitFor();
process.destroy();
} catch (IOException e) {
Database.LOG.error("CommonService:setBkndCfg()"+e.getMessage());
} catch (InterruptedException e) {
Database.LOG.error("CommonService:setBkndCfg()"+e.getMessage());
}
}
}).start();
可以看到这里我新开一个线程,拼接一个路径去保存数据库文件;当然不必对路径常量进行关注。主要是mysqldump命令那句话,我使用命令加上了用户名,密码和数据库,后面也跟上要保存的路径了;但是执行的时候却总是提示could’t find table xxx;老是说找不到这个表,这里这个xxx就是我的路径它截取了一部分;而process.waitFor()的返回值也是1,其实返回值是0的时候代表执行成功。在这里纠结了半天不知道为啥报错,后来发现这种cmd命令,如果自己的目录里带有空格的话,路径必须要用双引号包起来,加了双引号之后ok了。