Запуск .sql скрипта для создания таблиц через JDBC и MySQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите выполнить MySQL .sql скрипт с помощью JDBC, можете применить следующий простой метод:

Java
Скопировать код
String script = new String(Files.readAllBytes(Paths.get("script.sql"))); // Загружаем содержимое скрипта.
try (Connection conn = DriverManager.getConnection("jdbc:mysql://host/db", "user", "pass");
     Statement stmt = conn.createStatement()) {
    for (String command : script.split(";")) {
        if (!command.trim().isEmpty()) {
            stmt.executeUpdate(command + ";"); // Выполняем команды последовательно.
        }
    }
} catch (SQLException e) {
    e.printStackTrace(); // Здесь мы обрабатываем SQL исключения.
}

Не забывайте подстроить параметры script.sql, host, db, user и pass под свои потребности. Теперь вы готовы к подключению!

Кинга Идем в IT: пошаговый план для смены профессии

Детальное выполнение скриптов с ScriptRunner

ScriptRunner – это класс, бесплатный для использования согласно лицензии Apache и доступный на GitHub. Этот инструмент предлагает расширенные возможности для выполнения .sql скриптов, обработки ошибок и управления транзакционностью SQL команд. Если вам необходим контроль над поведением автокоммита, ScriptRunner будет весьма подходящим.

Визуализация

Допустим, у нас есть:

Markdown
Скопировать код
🚂 = JDBC подключение
🛤️ = Путь к SQL скрипту
🗂️ = База данных

Тогда использование этого будет выглядеть так:

Markdown
Скопировать код
🚂(JDBC подключение).load(🛤️(Путь к SQL скрипту)).to(🗂️(База данных));

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

Практические примеры и реализации с использованием ScriptRunner

Основы ScriptRunner

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

Java
Скопировать код
try (Connection conn = DriverManager.getConnection("jdbc:mysql://host/db", "user", "pass")) {
    ScriptRunner runner = new ScriptRunner(conn);
    runner.setAutoCommit(true); // Включаем автокоммиты.
    runner.setStopOnError(true); // Останавливаемся при возникновении ошибок.
    Reader reader = new BufferedReader(new FileReader("script.sql"));
    runner.runScript(reader); // Запускаем скрипт.
} catch (IOException | SQLException e) {
    e.printStackTrace(); // Обрабатываем возможные ошибки.
}

ScriptRunner можно найти на GitHub как отдельный класс или в составе проекта Apache iBatis.

Применение Spring Framework для управления скриптами

Spring Framework предлагает класс ResourceDatabasePopulator, который облегчает запуск скриптов:

Java
Скопировать код
ResourceDatabasePopulator rdp = new ResourceDatabasePopulator();
rdp.addScript(new ClassPathResource("script.sql")); // Добавляем скрипт.
try (Connection conn = dataSource.getConnection()) {
    rdp.populate(conn); // Запускаем скрипты.
} catch (SQLException e) {
    e.printStackTrace(); // Обрабатываем исключения.
}

А также JdbcTestUtils для удобного выполнения SQL скриптов:

Java
Скопировать код
JdbcTestUtils.executeSqlScript(new JdbcTemplate(dataSource), new ClassPathResource("script.sql"), false); // Быстрое выполнение.

Обработка ошибок

Важно всегда заботиться об обработке SQLExceptions, оборачивая вызовы методов в блоки try-catch, чтобы избегать нежелательных проблем.

Максимальная эффективность с использованием StreamReader и Scanner

Если важна минимальная зависимость от внешних библиотек, то StreamReader и Scanner могут быть хорошим выбором:

Java
Скопировать код
InputStream is = new FileInputStream("script.sql"); // Открываем файл.
try (Scanner scanner = new Scanner(is).useDelimiter(";")) {
    try (Connection conn = DriverManager.getConnection("jdbc:mysql://host/db", "user", "pass");
         Statement stmt = conn.createStatement()) {
        while(scanner.hasNext()) {
            String sqlStmt = scanner.next() + ";";
            if (!sqlStmt.trim().isEmpty()) {
                stmt.executeUpdate(sqlStmt); // Выполняем SQL команду.
            }
        }
    }
} catch (FileNotFoundException | SQLException e) {
    e.printStackTrace(); // Обрабатываем исключения.
}

Это позволяет удерживать контроль на выполнением со максимально малым количеством зависимостей.

Полезные материалы

  1. Запуск .sql скрипта в MySQL с помощью JDBC – Stack Overflow — пошаговые инструкции и полезные советы по работе со скриптами в JDBC.
  2. Соединение с DataSource объектами – Java Tutorials — официальное руководство по работе с DataSource и Connection.
  3. ibatis-core 3.0 javadoc – ScriptRunner — документация по ScriptRunner для работы с базами данных.
  4. Туториал по JDBC API – Java™ Tutorials — универсальное руководство по работе с Java и MySQL через JDBC.
  5. Репозиторий Maven: JDBC драйверы для MySQL — источник для загрузки JDBC драйвера MySQL.
  6. Класс File – Java Platform SE 8 — полезный гид по работе с файлами, что важно при использовании SQL скриптов.