Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Runtime.getRuntime().exec()

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?

like image 942
JohnRaja Avatar asked Jan 27 '10 12:01

JohnRaja


People also ask

What is runtime getRuntime () exec?

In Java, the Runtime class is used to interact with Every Java application that has a single instance of class Runtime that allows the application to interface with the environment in which the application is running. The current runtime can be obtained from the getRuntime() method.

What is exec method in Java?

exec() method to call programs or commands from within your Java™ program.

How does Java Runtime exec work?

exec(String command) method executes the specified string command in a separate process. This is a convenience method. An invocation of the form exec(command) behaves in exactly the same way as the invocation exec(command, null, null).


2 Answers

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\""}
like image 170
VonC Avatar answered Sep 28 '22 03:09

VonC


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

like image 38
Andreas Dolk Avatar answered Sep 28 '22 04:09

Andreas Dolk