Рубрики
Без рубрики

Как проверить, существует ли таблица базы данных с помощью JDBC

Автор оригинала: Michał Dąbrowski.

1. введение

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

2. Использование DatabaseMetaData

JDBC предоставляет нам инструменты для чтения и записи данных в базу данных. Помимо фактических данных, хранящихся в таблицах, мы можем читать метаданные, описывающие базу данных. Для этого мы будем использовать объект DatabaseMetaData, который мы можем получить из соединения JDBC:

DatabaseMetaData databaseMetaData = connection.getMetaData();

DatabaseMetaData предоставляет множество информативных методов, но нам понадобится только один: getTables . Давайте использовать его для печати всех доступных таблиц:

ResultSet resultSet = databaseMetaData.getTables(null, null, null, new String[] {"TABLE"});

while (resultSet.next()) {
    String name = resultSet.getString("TABLE_NAME");
    String schema = resultSet.getString("TABLE_SCHEM");
    System.out.println(name + " on schema " + schema);
}

Поскольку мы не предоставили первые три параметра, мы получили все таблицы во всех каталогах и схемах. Мы также можем сузить ваш запрос, например, только до одной схемы:

ResultSet resultSet = databaseMetaData.getTables(null, "PUBLIC", null, new String[] {"TABLE"});

3. Проверка Наличия Таблицы В DatabaseMetaData

Если мы хотим проверить, существует ли таблица, нам не нужно перебирать результирующий набор. Нам нужно только проверить, не пуст ли результирующий набор. Давайте сначала создадим таблицу “СОТРУДНИК”:

connection.createStatement().executeUpdate("create table EMPLOYEE (id int primary key auto_increment, name VARCHAR(255))");

Теперь мы можем использовать объект метаданных, чтобы утверждать, что таблица, которую мы только что создали, действительно существует:

boolean tableExists(Connection connection, String tableName) throws SQLException {
    DatabaseMetaData meta = connection.getMetaData();
    ResultSet resultSet = meta.getTables(null, null, tableName, new String[] {"TABLE"});

    return resultSet.next();
}

Имейте в виду, что, хотя SQL не чувствителен к регистру, реализация метода getTables такова. Даже если мы определим таблицу со строчными буквами, она будет храниться в верхнем регистре. Из-за этого метод getTables будет работать с именами таблиц в верхнем регистре, поэтому нам нужно использовать “СОТРУДНИК”, а не “сотрудник”.

4. Проверьте, Существует ли Таблица С SQL

Хотя DatabaseMetaData удобен, для достижения той же цели нам может потребоваться использовать чистый SQL. Для этого нам нужно взглянуть на таблицу “ таблицы “, расположенную в схеме “ information_schema “. Это часть стандарта SQL-92 , и она реализована большинством основных движков баз данных (за заметным исключением Oracle).

Давайте запросим таблицу ” tables ” и посчитаем, сколько результатов будет получено. Мы ожидаем единицы, если таблица существует, и нуля, если ее нет:

SELECT count(*) FROM information_schema.tables
WHERE table_name = 'EMPLOYEE' 
LIMIT 1;

Использование его с JDBC-это вопрос создания простого подготовленного оператора, а затем проверки, не равен ли результирующий счетчик нулю:

static boolean tableExistsSQL(Connection connection, String tableName) throws SQLException {
    PreparedStatement preparedStatement = connection.prepareStatement("SELECT count(*) "
      + "FROM information_schema.tables "
      + "WHERE table_name = ?"
      + "LIMIT 1;");
    preparedStatement.setString(1, tableName);

    ResultSet resultSet = preparedStatement.executeQuery();
    resultSet.next();
    return resultSet.getInt(1) != 0;
}

5. Заключение

В этом уроке мы узнали, как найти информацию о существовании таблиц в базе данных. Мы использовали как JDBC DatabaseMetaData , так и чистый SQL.

Как обычно, все примеры кода доступны на GitHub .