仅当数据库名称包含like(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这样的数据库名称。 数据库名称是否为空?
答案 0 :(得分: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\""}
答案 1 :(得分:2)
Java和操作系统需要知道命令是什么以及参数是什么。所以:
1)您可以尝试使用exec(String, String[])
分别提供cmd和args
2)你可以将mysqldump命令和每个参数括在操作系统的双引号中,以便了解它们的单个内容。
如果使用(1)选项,mysqldump程序将在数组中按项接收一个参数,无论空格还是其他。
答案 2 :(得分:2)
文件路径包含空格,可能是(其中一个)问题。试试这个:
dumpCommand = "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\" -h"
+hostName+user+databaseName;
并按照phisch的Suggstion打印dumpCommand
字符串以仔细检查它是否是一个有效的mysqldump调用
答案 3 :(得分:0)
似乎mysqldump语法有点不同。以下是我的工作示例 mysqldump -h mysserver -u root -p my_db -R> create_db.sql 我认为你应该使用“”或“`来复杂的名字(没有检查过我自己)。
答案 4 :(得分:0)
我不确定我是否完全理解你的问题,但你的dumpCommand似乎将所有变量(hostName,user,databaseName)连接成一个大字符串。
执行System.out.println(dumpCommand);看看你是否真的想要执行它。
你可能在这里遗漏了一些空格。
如果“ - ”本身是个问题,你可能想要转义它,否则mysqldump会认为它是一个参数。