Есть ли (более или менее) стандартный способ проверить не только, назвала ли таблица mytable
существует, но также и подобна ли его схема тому, каково это должно быть? Я экспериментирую с базой данных H2, и
CREATE TABLE IF NOT EXISTS mytable (....)
операторы по-видимому только проверяют на имя таблицы. Я ожидал бы получать исключение, если существует таблица с именем, но другая схема.
Двойной ответ:
(a) Существование таблицы - это то, что должно обеспечиваться процедурой установки приложения, а не приложением. сам во время выполнения.
(b) Если вы действительно считаете, что у вас есть веская причина для отклонения от (a), вы можете попытаться запросить каталог, который представляет собой базу данных, состоящую из таблиц, структура которых более или менее предписана INFORMATION_SCHEMA из стандарт SQL. Какие таблицы существуют, какие столбцы у них есть, какие типы данных имеют эти столбцы, какие ключи объявлены и т. Д. И т. Д., Все это там.
Я не знаю ни одной базы данных, которая бы имела такую возможность.
Я не использовал ее (накатал свой собственный код для этого), но, возможно, Apache DdlUtils сможет помочь.
Это непростое дело, особенно если вы хотите, чтобы оно работало с базами данных разных производителей. Также, вероятно, существуют различные мнения о том, насколько похожими должны быть схемы, чтобы пройти проверку. Имена столбцов, порядок столбцов, типы столбцов, определение первичного ключа: безусловно. Но как насчет ограничений, имен ограничений, определений табличных пространств и так далее?
. СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ ...
не является стандартным кодом SQL.
Надо проверить, есть ли таблица в каталоге.
Например, в Java вы можете сделать что-то вроде:
connection.getMetaData (). GetTables (connection.getCatalog (), null, null, null)
Для получения дополнительной информации см. javadoc java.sql.Connection .