2015-10-12 1 views
0

Следующий код всегда возвращается 1. Я не понимаю, почему.Выполнение mysql восстановления cmd в java runtimeProcess.waitFor() возвращает 1 всегда

String executeCmd[] = {"mysql"," -u" + dbUser," -p" + dbPass," -A"," -D"+dbName ," < " + restorePath}; 

Process runtimeProcess = Runtime.getRuntime().exec(executeCmd); 
int processComplete = runtimeProcess.waitFor(); 

if (processComplete == 0) { 
    System.out.println("Successfully restored from SQL : " + s); 
} else { 
    System.out.println("Error at restoring"); 
} 
+0

вы работаете в Windows, или Linux? – Reimeus

+0

Я в среде linux. – Bee

+0

Перенаправление ввода («<») обрабатывается оболочкой («bash»), а не вашей ОС. – dummy

ответ

1

Я зажег голову, пытаясь решить эту проблему в течение недели, и я, наконец, понял это.

Проблема в том, что < в вышеуказанном коде (перенаправление потока). Вы не можете использовать перенаправление потоков при выполнении процесса на Java (в этом случае он просто не работает).

Итак, вы должны сделать это, не используя перенаправление потока. Один из способов сделать это:

mysql -u root -p**** --execute "SOURCE \\path\\to\\sql" 

Try:

String executeCmd[] = {"mysql"," -u "+dbUser," -p"+dbPass," -A"," -D"+dbName," --execute"," \"SOURCE "+restorePath+"\""}; 

или просто:

String executeCmd = "mysql -u "+dbUser+" -p"+dbPass+" -A -D "+"dbName -e \"SOURCE "+restorePath+"\""; 
1

Redirect < интерпретируется командной оболочкой. Попробуйте

String executeCmd[] = 
     {"bash", "-c", "mysql", "-u", dbUser, "-p", dbPass, "-A","-D", dbName , "< ", restorePath}; 
+0

Я думаю, что параметры не должны быть объединены: '' -u "+ dbUser' ->' "-u", dbUser' – dummy

+0

@Bee yes '<' все еще существует, поэтому в этом случае потребуется командная оболочка ... – Reimeus

+0

не работает для меня. Я просто скопировал вашу линию. :( – Bee