代码之家  ›  专栏  ›  技术社区  ›  JohnRaja

runtime.getRuntime().exec()。

  •  8
  • JohnRaja  · 技术社区  · 15 年前

    只有当数据库名称包含(new database(myid)等)时,我才能读取文件。 我给出了以下示例代码:

    dumpCommand = "C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump -h"+hostName+user+databaseName;
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(dumpCommand);                     
    InputStream in = proc.getInputStream();              
    BufferedReader br=new BufferedReader(new InputStreamReader(in));
    String line =null;
    
     while((line=br.readLine())!=null)
    {
    //able to read line only when database name like abc,datastore etc...
    System.out.println(line);
        }
    

    假设我的数据库名称de mo意味着当我打印行时,我得到的数据库名称就像de only。 当数据库名称有空时是否可能?

    5 回复  |  直到 13 年前
        1
  •  15
  •   VonC    15 年前

    你熟悉吗 exec 双引号错误?(用于 Runtime.exec ProcessBuilder )

    你可以试试:

    Runtime.getRuntime().exec(new String[] {
      "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\"", 
      "-h", 
      hostName+user+databaseName});
    

    只需确保您必须传递的参数中没有一个包含双引号(而 以双引号开头)
    (见 bug 6511002 )

    任何参数,如:

    mykey="my value with space"
    

    会改变的 内部的 (由 getRuntime() 实施)到

    "mykey="myvalue with space""
    

    如果是这种情况,您需要标记化参数:

    {"mykey=\"my\"" , "\"value with space\""}
    
        2
  •  2
  •   Andreas Dolk    15 年前

    文件路径包含空白,这可能是(一个)问题。试试这个:

    dumpCommand = "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\" -h"
                   +hostName+user+databaseName;
    

    然后按照phisch的建议打印 dumpCommand 双重检查它是否是有效的mysqldump调用的字符串

        3
  •  2
  •   helios    15 年前

    Java和OS需要知道什么是命令和什么是参数。所以:

    1)您可以尝试使用 exec(String, String[]) 单独提供命令和参数

    2)您可以将mysqldump命令和每个参数括在双引号中,以便操作系统了解它们的单个内容。

    如果使用(1)选项,mysqldump程序将在数组中逐项接收一个参数,不管是空格还是其他什么。

        4
  •  0
  •   phisch    15 年前

    我不确定我是否完全理解您的问题,但是dumpcommand似乎将所有变量(hostname、user、databasename)连接到一个大字符串中。

    做一个system.out.println(dumpcommand);看看这是否是你真正想要执行的。

    这里可能缺少一些空格。

    如果“—”本身是一个问题,那么您可能希望对其进行转义,否则mysqldump会认为它是一个参数。

        5
  •  0
  •   burnall    15 年前

    似乎mysqldump的语法有点不同。下面是我的工作示例 mysqldump-h myserver-u root-p my_db-r>创建_db.sql 我认为你应该用“或”来表示复杂的名字(我自己还没有检查过)。