Создать Базу данных PostgreSQL c помощью SQL скрипта для приложения на java

Я делаю приложение на джаве с небольшой локальной БД и мне надо, чтобы эта база данных создавалась с помощью sql файла. То есть условно скинул проект кому-то, в проекте скрипт, другой человек запустил его и скрипт создал ему БД. Не до конца понимаю, как это можно сделать. Я создал вот такой примитивный скл файл

CREATE DATABASE school;
CREATE USER maintainer;
ALTER ROLE maintainer SUPERUSER CREATEROLE CREATEDB;

Подскажите, будет ли он работает и создать БД и если да, то как вообще этот скрипт запустить?


Ответы (2 шт):

Автор решения: Artur Vartanyan

Для того, чтобы при запуске программы у Вас инициализировалась БД в главном Main классе создаем метод:

// Script для инициализации БД
    // Использована библиотека IBATIS
    //
    private void runningScripts() throws SQLException, FileNotFoundException {
        // Тут подключаемся к БД
        String mysqlUrl = "jdbc:postgresql://localhost:5432/тутТакЖеПодСебя";
        Connection con = DriverManager.getConnection(mysqlUrl, "имя", "пароль");
        System.out.println("Connection established......");
        // Инициализируем ScriptRunner
        ScriptRunner sr = new ScriptRunner(con);
        System.out.println("Инициализируем базу данных PostgreSQL...");
        // Создаем reader и передаем туда файл .sql
        Reader reader = new BufferedReader(new FileReader
                ("D:\\Свой Путь к Файлу\\src\\main\\java\\com\\tinychiefdelights\\database\\initDataBase.sql"));
        // Запускаем runner
        sr.runScript(reader);
        System.out.println("База данных успешно проинициализированна!");
    }

Для примера покажу Gradle:

// https://mvnrepository.com/artifact/org.mybatis/mybatis
    compile group: 'org.mybatis', name: 'mybatis', version: '3.5.4'

И запускаем метод где-нибудь. Например в методе-Main:

// Экземпляр класса для запуска методов
        TinyChiefDelightsApplication tinyChiefDelightsApplication = new TinyChiefDelightsApplication();

 // Запускаем runningScripts
        tinyChiefDelightsApplication.runningScripts();
→ Ссылка
Автор решения: Sergey
String sql = new String(Files.readAllBytes(Paths.get("script.sql")));
try (Connection db = DriverManager.getConnection("jdbc:postgresql://localhost/postgres", "user", "password")) {
    Statement stmt = db.createStatement();
    stmt.execute(sql);
}
→ Ссылка