Задать вопрос
@Ezekiel4
Охотник на пиратов и сборщик монолитов

Как найти таблицу в нужной схеме MySQL?

В ходе изучения SQL возник вопрос - что если я запущу программу, а нужной таблицы не будет? В итоге дошёл до такой функции:

static void initTable(String tableName) {
	try (Connection c = getConnection()) {

		PreparedStatement preparedStatement = c.prepareStatement("SELECT count(*) FROM information_schema.tables WHERE table_name = ?LIMIT 1;");
		preparedStatement.setString(1, tableName);
		
		ResultSet resultSet = preparedStatement.executeQuery();
		resultSet.next();
		if (resultSet.getInt(1) == 0) {
			c.createStatement().execute("CREATE TABLE tutorial." + tableName + " (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, specialty VARCHAR(50) NOT NULL, salary INT NOT NULL, PRIMARY KEY (id));");
			System.out.println("Table \"" + tableName + "\" created.");
		} else
			System.out.println("Table \"" + tableName + "\" exists.");

		System.out.println("\n------------------------------\n");
	} catch (SQLException e) {
		e.printStackTrace();
	}
}


Вроде всё работает, но сразу наткнулся на проблему. В моём workbench висит несколько схем и когда я запускаю проверку, она ищет по всем схемам. Если таблицы с нужным названием нет, то создаёт там, где я указал. Но что если в другой схеме уже есть таблица с таким названием... как уточнить поиск до границ нужной схемы?
  • Вопрос задан
  • 179 просмотров
Подписаться 1 Простой 4 комментария
Решение пользователя Akina К ответам на вопрос (3)
@Akina
Сетевой и системный админ, SQL-программист.
что если я запущу программу, а нужной таблицы не будет?

Получите соответствующее сообщение об ошибке.

дошёл до такой функции

Сотрите срочно. Существование таблицы (вообще или в определённой схеме) проверяется запросом в INFORMATION_SCHEMA.TABLES.

SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
-- WHERE TABLE_NAME = 'my_table_name'
;


что если в другой схеме уже есть таблица с таким названием...

Ну допустим есть, и что?
Ответ написан
Комментировать