Как проверить, существует ли база данных после установления соединения 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();
}
Пожалуйста, обратите внимание на две вещи
- Новый класс драйвера - это com.mysql.cj.jdbc.Driver.
- Запрос CREATE DATABASE IF NOT EXISTS DBNAME означает, что вам не нужно проверять, завершается ли база данных.