线程正常终了时 p1.waitFor() == 0

 /**
     * 判断路径是否含有空格(含有空格Dos start命令无法识别)
     */
    private static String setFilePath(String path) {
        int index = path.indexOf(" ");
        if (index != -1) {
            path = path.replaceAll(" ", "\"" + " " + "\"");
        }
        System.out.println("Dos Star 路径问题:" + path);
        return path;
    }

    /**
     * 导入SQL文件
     * @param path 文件保存路径
     * @param textid 单位ID
     */
    private void export(String path) {
        try {
            // 调用外部批处理文件 对SQL文件中的 INSERT 改写为 REPLACE
            callbat(path);
            //执行DOS命令
            String temp1 = "cmd /c mysql -u root --password=sa bc <";
            Process p1 = Runtime.getRuntime().exec(temp1 + setFilePath(path));
            if(p1.waitFor() == 0){
             
             //导入数据成功
             import_message("1");
             //导入之后进行合计计算
             TotalUp.executeSum();
             //合计失败
             if (!TotalUp.executeSum()) {
              System.out.println("导入后合计失败");
             }
            }
        } catch (IOException e) {
            //导入数据失败
            import_message("0");
            System.err.print(e);
        }
    }

 




因为当你在一个Process上调用waitFor方法时,当前线程是阻塞的,如果外部命令无法执行结束,那么你的线程就会一直阻塞下去,这种意外会影响我们程序的执行。所以在我们不能判断外部命令什么时候执行完毕而我们的程序还需要继续执行的情况下,我们就应该循环的使用exitValue来取得外部命令的返回状态,并在外部命令返回时作出相应的处理。

你可能感兴趣的:(sql,C++,c,mysql,dos)