Я использую этот метод для отправки команды на Linux терминалИспользование PSQL в Linux с Java, чтобы импортировать SQL файл
public static String execute(String command) {
StringBuilder sb = new StringBuilder();
String[] commands = new String[]{"/bin/sh", "-c", command};
try {
Process proc = new ProcessBuilder(commands).start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String s = null;
while ((s = stdInput.readLine()) != null) {
sb.append(s);
sb.append("\n");
}
while ((s = stdError.readLine()) != null) {
sb.append(s);
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
Он прекрасно работает со многими командами, как «LS», «дата» и т.д ..
, но я хочу использовать команду Psql импортировать файл SQL в Postgre как:
PSQL -h локальный -p 5432 -u Postgres -d тест -f Test.sql
Я набрал эту команду вручную в терминале и работает отлично, но не с помощью метода выше (метод хорошо работает с датой, ls ...)
Похоже на записи метода в виде бесконечного цикла, когда он вызывает psql. Метод не заканчивается, когда метод вызывает psql.
ps: Я использовал export PGPASSWORD = pass, чтобы не пропускать пароль.