@My1Name

Как правильно создать БД в одном execute?

Можно ли объединить создание базы данных и таблицы в один execute?
Например, имеется запись следующего вида:
jdbcTemplate.execute("CREATE DATABASE IF NOT EXISTS usersdb");
jdbcTemplate.execute("USE usersdb");
jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS users"+
   "(id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,"+
   "email TINYTEXT NOT NULL,"+
   ....................
   "CONSTRAINT Index_Key PRIMARY KEY(id,email))");

На сколько это правильно, и можно ли это объединить?
  • Вопрос задан
  • 207 просмотров
Решения вопроса 1
@My1Name Автор вопроса
Скачиваем JDBC драйвер и добавляем в проект через Build Puth. Тренируемся создавать запросы и проверяем:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Main {
	public static void main(String[] args) {
		String command = "C:\\ путь к файлу .exe для запуска MySQL сервера с приложения \\MySQL Server 8.0\\bin\\mysqld.exe";
		try{
	   Runtime.getRuntime().exec(command); //run MySql
            String url = "jdbc:mysql://localhost/";
            String username = "root";
            String password = "byDefault";
            Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance();
            try (Connection conn = DriverManager.getConnection(url, username, password)){
            	 Statement statement = conn.createStatement();
            	 statement.execute("CREATE DATABASE IF NOT EXISTS usersdb");
            	 statement.execute("USE usersdb");
            	 statement.execute("CREATE TABLE IF NOT EXISTS users"+
            	    		"(id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,"+
            	    		"email VARCHAR(256) NOT NULL,"+
            	    		"password VARCHAR(128),"+
            	    		"UNIQUE KEY(email));");
            		}
        }
		catch(Exception e){
            e.printStackTrace();
        }
}

Всё работает. Зашивать JDBC коннектор в проект, запускать или создавать базу данных с приложения, решать только разработчику. https://www.mysqltutorial.org/mysql-unique/
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
Обычно БД создается во время процессов CD/CD через технологии liqubase/flyway.
Таблицы тоже. В этом есть смысл потому что БД и таблицы это такие долго-живущие объекты
и кроме того не лежащие в плоскости транзакций. Они - выше транзакций и их надо логически
отделять от прочего java кода. А в java коде - оставить insert/update/delete.
Ответ написан
технически можно при поощи
jdbc_prefix = "mysql";
options = "allowMultiQueries=true&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8";
"jdbc:" + jdbc_prefix+"://" + serverName + "/" + databaseName + "?" + options;

https://stackoverflow.com/questions/10797794/multi...

но не рекомендуется в приложениях
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы