Создать Базу данных 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);
}