Как проверить, существует ли база данных после установления соединения JAVA

У меня большой вопрос... У меня есть создание базы данных Java-программы.

Я хочу знать, существует ли база данных или нет, и если существует, просто подключиться, если не для ее создания.

Я попробовал это:

if (dbName.exists() == false) {}

ЭТО ВСЕ КОДЕКС...

Class.forName("com.mysql.jdbc.Driver");
System.out.println("MySQL JDBC driver loaded ok.");

ЭТО РЕЗЕРВНЫЙ КОД ДЛЯ ЭТОГО, ПРОСТО РАБОТАЕТ СЕЙЧАС.... ЧАСТИЧНЫЙ КОД, КОТОРЫЙ РАБОТАЕТ!

conn = DriverManager.getConnection(DBurl + url
+ "?createDatabaseIfNotExist=true& + "
+ "useUnicode=true&characterEncoding=utf-8&user="
+ userName + "&&password=" + password);


System.out.println("Connected to database ");           
System.out.println("Connected to the database " + url);

НО ЧТО-ТО ХОЧУ

FILE dbName = new FILE (url);
Statement stmt = new Statement;

if (dbName.exists() == true)
   System.out.println("Database exists ! Connecting ... ");
else {
   String sql = "CREATE DATABASE "+url;
   stmt.executeUpdate (sql);
}

Я не хочу помещать URL с паролем и именем пользователя в одном месте... потому что они предоставляются из внешней части, но это уже реализовано и работает.

Так что я хочу скопировать в 2 мира, 1 Connect "jdbc:mysql://localhost:3306/"; БЕЗ URL, который является ИМЯ базы данных... И, ЕСЛИ БАЗА ДАННЫХ НЕ СУЩЕСТВУЕТ, ИМЯ ТОЛЬКО СОЗДАТЬ.

Это не работает.... не входя в else и говорит, что Exeption Database уже существует.

Большое вам спасибо.

2 ответа

Решение

Если это база данных MySQL, следующий код должен работать. Другие базы данных могут давать другой код ошибки, но общий путь должен быть понятен. Важно то, что вы подключаетесь к экземпляру, а не к конкретной базе данных изначально. Для создания таблиц вам необходимо подключиться к вновь созданной базе данных. Вы не можете использовать соединение экземпляра, которое я использую в своем примере для создания таблиц:

    Connection connection = null;
    Statement statement = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://localhost/",
                "root", "admin");
        statement = connection.createStatement();
        String sql = "CREATE DATABASE DBNAME";
        //To delete database: sql = "DROP DATABASE DBNAME";
        statement.executeUpdate(sql);
        System.out.println("Database created!");
    } catch (SQLException sqlException) {
        if (sqlException.getErrorCode() == 1007) {
            // Database already exists error
            System.out.println(sqlException.getMessage());
        } else {
            // Some other problems, e.g. Server down, no permission, etc
            sqlException.printStackTrace();
        }
    } catch (ClassNotFoundException e) {
        // No driver class found!
    }
    // close statement & connection

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

boolean canConnect = false;
Connection conn = null;
try{
    conn = DriverManager.getConnection(...);
    canConnect = true;
}(Exception ex){
   canConnect = false;
}

if (!canConnect){
  makeDatabase(...);
}

Хорошего вам дня!

try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/", "root", "admin");
        Statement statement = connection.createStatement();
        String sql = "CREATE DATABASE IF NOT EXISTS DBNAME";
        statement.executeUpdate(sql);
    } catch (ClassNotFoundException | SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Пожалуйста, обратите внимание на две вещи

  1. Новый класс драйвера - это com.mysql.cj.jdbc.Driver.
  2. Запрос CREATE DATABASE IF NOT EXISTS DBNAME означает, что вам не нужно проверять, завершается ли база данных.
Другие вопросы по тегам