Запуск команды PSQL в Java-программе - PullRequest
0 голосов
/ 04 января 2019

У меня есть требование, когда с помощью Java-кода мне нужно создавать / удалять / изменять таблицы postgres.

Я написал программу, как показано ниже:

public static void main(String[] args) throws IOException {
        System.out.println("Hello World!");
        Process p = Runtime.getRuntime().exec("psql -U postgres -d testdb -h localhost -p 5433 -f D:\test.sql");
    }

test.sql файл выглядит ниже,

Create TABLE MyTable1
(
    VersionNumber VARCHAR(32) NOT NUll
);

Create TABLE MyTable2
(
    VersionNumber VARCHAR(32) NOT NUll
);

Create TABLE MyTable3
(
    VersionNumber VARCHAR(32) NOT NUll
);

Проблема:

Если я запускаю ту же команду psql:

psql -U postgres -d testdb -h localhost -p 5433 -f D:\test.sql

в командной строке запрашивает пароль и таблицы создаются.

Но в Java-программе не предусмотрено предоставление пароля. Пожалуйста, дайте мне знать, как этого добиться.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вместо этого можно использовать URL-адрес соединения :

psql -f d:\test.sql postgresql://postgres:password@localhost:5433/testdb
0 голосов
/ 04 января 2019

Прежде всего, было бы лучше использовать JDBC для подключения к базе данных и выполнения ваших операторов SQL.Если вы настроили использование командной строки psql, вы можете использовать переменную окружения PGPASSWORD для установки пароля:

String command = "psql -U postgres -d testdb -h localhost -p 5433 -f D:\test.sql";
String[] envVars = { "PGPASSWORD=yourpassword" };
Process p = Runtime.getRuntime().exec(command, envVars);

. При необходимости вы можете прочитать пароль из stdin.Но, опять же, лучше сделать это через JDBC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...