Reputation: 597
I want to execute database import from .sql file from java program. My program is working fine on windows. But I am facing problem on linux machine.
Code -
try {
ProcessBuilder builder = new ProcessBuilder("mysql -u root -p password db-name < db_script.sql");
builder.redirectErrorStream(true);
Process pr = builder.start();
InputStream is = pr.getInputStream();
// Now read from it and write it to standard output.
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
} catch (Exception e) {
e.printStackTrace();
}
I am getting - java.io.IOException: Cannot run program "mysql -u root -p password db-name < db_script.sql": java.io.IOException: error=2, No such file or directory
The above command is working fine on linux terminal. Some one please advice me on this.
Thanks in advance
Upvotes: 2
Views: 3985
Reputation: 23
A simple way to achieve it.
String DBUSERNAME = "";
String DBUSERPASSWORD = "";
String sqlfilename = "";
PrintWriter writer = new PrintWriter("tmp.dmp", "UTF-8");
writer.println("mysql --user " + DBUSERNAME + " --password=" + DBUSERPASSWORD + " < " + sqlfilename);
writer.close();
runCommand("chmod 777 tmp.dmp");
runCommand("./tmp.dmp");
runCommand("rm tmp.dmp");
public static void runCommand(String command) throws IOException {
String s = "";
Process p = Runtime.getRuntime().exec(command);
BufferedReader stdInput = null;
BufferedReader stdError = null;
try {
stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
// read the output from the command
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
} finally {
if (stdInput != null) {
stdInput.close();
}
if (stdError != null) {
stdError.close();
}
}
}
Upvotes: 0
Reputation: 32831
The < redirection is a shell thing. Try something like this:
ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", "mysql -u root -p password db-name < b_script.sql");
UPDATE:
Otherwise, if you're using java 7+, you can do the redirection in java:
ProcessBuilder builder = new ProcessBuilder(
"mysql", "-u", "root", "-p", "password", "db-name");
builder.redirectInput(ProcessBuilder.Redirect.from(new File("b_script.sql")));
Upvotes: 9
Reputation: 30698
have you checked that your code is executed from proper dir??
that if your db_script.sql is inhome then you are running from home as
home>mysql -u root -p password db-name < db_script.sql
or provide full path of db_script.sql in the command
Upvotes: 0