2010-01-27 99 views
8

只有当数据库名称包含像(新的数据库(身份识别码)等 我给下面的示例代码,我无法读取文件:调用Runtime.getRuntime()EXEC()

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); 
    } 

假设我的数据库名でも意味着当我打印行我的数据库名称只喜欢去。 可能在数据库名称与空的空间?

回答

15

你熟悉的exec双引号的错误?(对于Runtime.execProcessBuilder

你可以试试:

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\""} 
0

看来mysqldump的语法是有点不同的,下面是我的工作示例 的mysqldump -h mysserver -u root -p my_db -R> create_db.sql 我想你应该把我们e“”或“`复杂的名字(没有检查自己)。

0

我不确定如果我完全理解你的问题,但你的dumpCommand似乎将所有变量(hostName,user,databaseName)连接成一个大字符串。

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

您可能在此处缺少一些空格。

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

2

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

1)你可以尝试使用exec(String, String[])由单独

2提供CMD和参数)你可以附上mysqldump命令和每个参数为双引号的OS知道他们的单一的东西。

如果使用(1)选项,mysqldump程序将在数组中按项目接收一个参数,而不管空格或其他。

2

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

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

,并按照phisch的suggstion打印dumpCommand String要仔细检查,这是一个有效的mysqldump呼叫

相关问题