Runtime.getRuntime().exec()
Asked Answered
P

5

8

I can not read a file only when database name contains like (new database (myid) etc. I give a following example code:

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

Suppose my database name de mo means when I print line I got database name like de only. Is possible when database name with empty space?

Pneumococcus answered 27/1, 2010 at 12:18 Comment(0)
D
16

Are you familiar with the exec double-quotes bug? (for Runtime.exec or ProcessBuilder)

You can try:

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

Just make sure none of your parameters you will have to pass contains double quotes (while not beginning with double quotes)
(see bug 6511002)

Any parameter like:

mykey="my value with space"

would be changed internally (by the getRuntime() implementation) into

"mykey="myvalue with space""

If that is the case, you would need to tokenize the argument:

{"mykey=\"my\"" , "\"value with space\""}
Dejection answered 27/1, 2010 at 14:26 Comment(0)
P
3

The file path contains blanks, that may be (one of) the problem(s). Try this instead:

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

and follow phisch's suggstion to print the dumpCommand String to double check that it's a valid mysqldump call

Petepetechia answered 27/1, 2010 at 12:42 Comment(0)
M
2

Java and the OS need to know what is the command and what are the arguments. So:

1) You can try to use exec(String, String[]) to provide the cmd and the args by separate

2) You can enclose the mysqldump command and each argument into double quotes for the OS to know their single things.

If you use the (1) option mysqldump program will receive one argument by item in the array, no matter the spaces or whatever.

Malapropism answered 27/1, 2010 at 12:35 Comment(0)
A
0

It seems mysqldump syntax is a little bit different. Below is my working example mysqldump -h mysserver -u root -p my_db -R > create_db.sql I think you should use "" or `` for complex names (have not checked myself).

Axolotl answered 27/1, 2010 at 12:30 Comment(0)
R
0

I am not sure if I understand you question in full, but your dumpCommand seems to concat all Variables (hostName, user, databaseName) to one big string.

Do a System.out.println(dumpCommand); and see if that is what you realy want to execute.

You are probably missing some spaces here.

If the "-" itself is a problem, you might want to escape it, otherwise mysqldump will think it is a parameter.

Rinker answered 27/1, 2010 at 12:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.