2

Есть база данных в которой будет много таблиц палитр цветов , записываемых пользователем. Но как вывести все имена таблиц кроме системных ? При следующем запросе выводятся все имена таблиц:

SELECT NAME FROM sqlite_master WHERE type = 'table'

Но вместе с нужными, там выводятся также таблицы типа "android_system, sqlite_sequence". Видел вариант с дополнением "WHERE name != 'android_system'" или подобным синтаксисом. Но я не уверен что пользователь не запишет таблицу с именем, которое содержит слово "system" или "android". И решил что лучше если таблицы будут выводиться только те, которые содержат имена полей "RGB"(в таблицах гарантировано будут эти поля). Как должен выглядеть запрос, но чтоб проверялось условие наличия поля с именем "RGB"?

Akina
  • 31,807
  • В таблице sqlite_master есть поле SQL, в котором содержится CREATE TABLE для таблицы в виде текста. Первичный отбор можете проводить по наличию в нём подстроки 'RGB', при желании можете организовать и более надёжную проверку (скажем, по подстроке ',RGB INTEGER NOT NULL,', если структуры таблиц хорошо унифицированы). См. https://www.sqlite.org/fileformat.html , пункт 2.6. – Akina Sep 20 '17 at 05:35
  • Да. Составил правильный запрос. Выглядит : " SELECT tbl_name, sql FROM sqlite_master WHERE type = 'table' AND sql LIKE '%RGB INTEGER%' " .Где RGB INTEGER - нужное имя и тип колонки – user204732 Sep 20 '17 at 06:48
  • Если это поле в структуре гарантированно не первое, я бы использовал шаблон '%,SQL %'. А то введётся потом поле типа nextRGB INTEGER, и тебе станет грустно... – Akina Sep 20 '17 at 07:36

0 Answers0