Как надежно проверить в SQLite, существует ли конкретная пользовательская таблица?
Я не прошу ненадежных способов, таких как проверка, вернул ли «select *» в таблице ошибку или нет (это даже хорошая идея?).
Причина такова:
В моей программе мне нужно создать, а затем заполнить некоторые таблицы, если они еще не существуют.
Если они уже существуют, мне нужно обновить некоторые таблицы.
Должен ли я использовать какой-то другой путь вместо этого, чтобы сигнализировать о том, что соответствующие таблицы уже созданы - например, путем создания / установки / установки определенного флага в файле инициализации / настройки программы на диске или что-то еще?
Или мой подход имеет смысл?
sqlite3.OperationalError
, поэтому вам нужно проанализировать сообщение об ошибке, чтобы убедиться, что это, например, сообщение «таблица TABLE_NAME уже существует» при создании таблица, а если нет, то переформулируйте ошибку, и я думаю, что нет никакой гарантии, что формулировка ошибки не изменится.Ответы:
Я пропустил эту запись FAQ.
В любом случае, для дальнейшего использования, полный запрос:
Где
{table_name}
имя таблицы для проверки.Раздел документации для справки: Формат файла базы данных. 2.6. Хранение схемы базы данных SQL
источник
Если вы используете SQLite версии 3.3+, вы можете легко создать таблицу с:
Таким же образом вы можете удалить таблицу, только если она существует, используя:
источник
create table
оператор является неполным (отсутствует спецификация столбцов таблицы).Вариантом будет использование SELECT COUNT (*) вместо SELECT NAME, т.е.
Это вернет 0, если таблица не существует, 1, если она существует. Это, вероятно, полезно в вашем программировании, поскольку численный результат обрабатывается быстрее / проще. Ниже показано, как вы можете сделать это в Android, используя SQLiteDatabase, Cursor, rawQuery с параметрами.
источник
COUNT(*)
) легко обрабатывается, еще проще вернуть существование строки или нет; если там есть строка, то она существует, если нет строки, то ее нет. (Вы уже проверите на провал в moveToFirst, так что работа будет выполнена в этот момент.)Вы можете попробовать:
источник
SQLiteReader reader = cmd.ExecuteReader();
и выполните adt.Load(reader)
(гдеdt
isDataTable
). Я обнаружил, что этоObject reference is not an instance of an object
исключение,.Load()
если таблица не найдена. Вместо этого используйтеSQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
и делайтеadapter.Fill(ds)
, гдеds
естьDataSet
. Затем вы можете увидеть, еслиds.Tables.Count > 0
иreturn ds.Tables[0];
если да (илиelse return null
). Тогда вы можете проверить этоDataTable
для тогоnull
, чтобы быть , еслиdt.Rows != null
и еслиdt.Rows.Count>0
Использование:
Если полученная таблица пуста, то
your_table_name
не существует.Документация:
Пример вывода:
источник
Имена таблиц SQLite нечувствительны к регистру, но сравнение по умолчанию чувствительно к регистру. Чтобы это работало правильно, во всех случаях нужно добавить
COLLATE NOCASE
.источник
Если вы получаете сообщение об ошибке «таблица уже существует», внесите изменения в строку SQL, как показано ниже:
Таким образом, вы можете избежать исключений.
источник
Смотрите это :
источник
Если вы используете fmdb , я думаю, вы можете просто импортировать FMDatabaseAdditions и использовать функцию bool:
источник
Следующий код возвращает 1, если таблица существует, или 0, если таблица не существует.
источник
Обратите внимание, что для проверки существования таблицы в базе данных TEMP вы должны использовать
sqlite_temp_master
вместоsqlite_master
:источник
Вот функция, которую я использовал:
Имеется объект SQLDatabase = db
источник
Используйте этот код:
Если количество возвращаемых массивов равно 1, это означает, что таблица существует. В противном случае его не существует.
источник
Примечание: теперь это работает на моем Mac с Python 3.7.1
источник
table_name
он не предоставляется из ненадежного источника (например, пользовательского ввода), иначе он будет уязвим для внедрения SQL. Всегда лучше использовать параметры вместо методов обработки текстаиспользование
чтобы предотвратить чтение всех записей.
источник
Вы можете написать следующий запрос для проверки существования таблицы.
Здесь 'table_name' - это имя вашей таблицы, которое вы создали. Например
и проверить
источник
Самый надежный способ, который я нашел в C # прямо сейчас, с использованием новейшего пакета sqlite-net-pcl nuget (1.5.231), использующего SQLite 3, заключается в следующем:
источник
Использование простого запроса SELECT, на мой взгляд, довольно надежно. Больше всего он может проверять существование таблицы во многих различных типах баз данных (SQLite / MySQL).
Это имеет смысл, когда вы можете использовать другой надежный механизм определения успешности запроса (например, вы запрашиваете базу данных через QSqlQuery в Qt ).
источник
Функция c ++ проверяет БД и все подключенные базы данных на наличие таблицы и (необязательно) столбца.
Изменить: Недавно обнаружил функцию sqlite3_table_column_metadata. следовательно
источник
Это мой код для SQLite Cordova:
И другой:
источник
Я думал, что я бы положил свои 2 цента на это обсуждение, даже если оно довольно старое. Этот запрос возвращает скалярное значение 1, если таблица существует, и 0 в противном случае.
источник
Таблица существует или нет в базе данных в Swift
источник