8

只有当数据库名称包含类似(新数据库(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。当数据库名称带有空格时可以吗?

4

5 回答 5

16

您熟悉exec双引号错误吗?(对于Runtime.execProcessBuilder

你可以试试:

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

只需确保您必须传递的所有参数都不包含双引号(而不是以双引号开头)
(请参阅 错误 6511002

任何参数,如:

mykey="my value with space"

将在内部(通过getRuntime()实现)更改为

"mykey="myvalue with space""

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

{"mykey=\"my\"" , "\"value with space\""}
于 2010-01-27T14:26:32.193 回答
3

文件路径包含空格,这可能是问题之一。试试这个:

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

并按照 phisch 的建议打印dumpCommand字符串以仔细检查它是否是有效的 mysqldump 调用

于 2010-01-27T12:42:01.113 回答
2

Java 和操作系统需要知道什么是命令和什么是参数。所以:

1)您可以尝试使用exec(String, String[])单独提供cmd和args

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

如果您使用 (1) 选项 mysqldump 程序将在数组中逐项接收一个参数,无论空格或其他什么。

于 2010-01-27T12:35:14.647 回答
0

似乎 mysqldump 语法有点不同。下面是我的工作示例 mysqldump -h mysserver -u root -p my_db -R > create_db.sql 我认为你应该使用 "" 或 `` 来表示复杂的名称(我自己没有检查过)。

于 2010-01-27T12:30:23.150 回答
0

我不确定我是否完全理解您的问题,但您的 dumpCommand 似乎将所有变量(主机名、用户、数据库名)连接到一个大字符串。

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

您可能在这里遗漏了一些空格。

如果“-”本身有问题,你可能要转义它,否则mysqldump会认为它是一个参数。

于 2010-01-27T12:31:08.377 回答