---------------------------------------------------------------------------
String command="mysqldump --opt -u 用户名 -p密码 库名 表名> d:\\abc.sql";   
try {
Runtime.getRuntime().exec(command,null);
    } catch (Exception e) {e.printStackTrace();} 
---------------------------------------------------------------------------
mysqldump --opt -u 用户名 -p密码 库名 表名> d:\\abc.sql
直接在CMD下执行没有问题
但是在JAVA里使用Runtime.getRuntime().exec怎么也无法生成abc.sql
然后我在网上看到一个方法
---------------------------------------------------------------------------
String command="mysqldump --opt -u 用户名 -p密码 库名 表名> d:\\abc.sql";   
try {
Process p=Runtime.getRuntime().exec(command,null);
        p.waitFor(); 
    } catch (Exception e) {e.printStackTrace();} 
---------------------------------------------------------------------------
结果线程停留在p.waitFor(); 不动了~~晕死~
请高手指点啊!!

解决方案 »

  1.   

    把备份命令做成
    backupMysql.bat然后调用这个bat程序,
    exec后,不需要任何处理,直接做后面的其他事情,比如返回。无需等待
      

  2.   

    对了,批处理里面最好重新设置当前路径,你不要指望当前路径就是bat所在的路径
    比如d:\backup.bat应该这样写d:
    cd\
    mysqldump ...
      

  3.   

    这么说吧,你直接调用命令时,许多路径啊,参数啊都是需要你自己设置的,也许你用下面这个代码能看到到底发生了什么!!  public static void main(String args[]) throws Exception {
        Runtime run = Runtime.getRuntime();
        Process pro = run.exec("d:\\myBat.bat"); // 换成你的命令吧!!!!
        BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream()));
        pro.waitFor();
        String str = "";
        while ((str = br.readLine()) != null) {
          System.out.println(str);
        }
        br.close();
        pro.destroy();  }看看控制台输出啥东西!!也许是让你按回车呢,哈哈! 可是你又按不到!
      

  4.   

    错了,那个 waitFor() 得去掉才行
      public static void main(String args[]) throws Exception {
        Runtime run = Runtime.getRuntime();
        Process pro = run.exec("d:\\myBat.bat");
        BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream()));
        String str = "";
        while ((str = br.readLine()) != null) {
          System.out.println(str);
        }
        br.close();
        pro.destroy();
      }
      

  5.   

    哇~~太神奇了~~哈哈哈~~出了这些东西~
    -- MySQL dump 10.9
    --
    -- Host: localhost    Database: tsem
    -- ------------------------------------------------------
    -- Server version 4.1.21-community-nt/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
      

  6.   

    不能用~不能生成.sql文件~我输出bat方式做的~~就是有点麻烦!
    谢谢了!
      

  7.   

      public static void main(String args[]) throws Exception {
        Runtime run = Runtime.getRuntime();
        Process pro = run.exec("d:\\myBat.bat");
        BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream()));
        String str = "";
        while ((str = br.readLine()) != null) {
          System.out.println(str);
        }
        br.close();
        pro.destroy();
      }
    为什么这个用别的页面调用就报错呢?
      

  8.   

    run.exec("d:\\myBat.bat"); 因为你那里没有这个 d:\\myBat.bat 啦!
      

  9.   

    哦!知道了~输出的时候没有关闭流~结果bat正被java占用~无法操作!谢谢了!给分~结贴~!
      

  10.   

    编程文章网       http://www.KingOfCoder.com
    新年快乐