sqlite: Как получить идентификатор столбца выбранного столбца? - PullRequest
0 голосов
/ 18 января 2012

Дано:

  • база данных sqlite с таблицей T
  • таблица T содержит 10 столбцов - C0, C1 ... C9.
  • указатель sqlite3_stmt, соответствующий select C3,C2 from T

ОК, так что я могу получить выбранные значения столбцов, используя семейство методов sqlite3_column_XXX (http://www.sqlite.org/capi3ref.html#sqlite3_column_blob),, например:

sqlite3_stmt *s;
sqlite3_prepare_v2(db, query, sizeof(query), &s, NULL);
while ((result = sqlite3_step(s)) == SQLITE_ROW)
{
  const char *v3 = reinterpret_cast<const char *>(sqlite3_column_text(s, 0);
  const char *v2 = reinterpret_cast<const char *>(sqlite3_column_text(s, 1);
}

Мне нужен реальный индекс выбранных столбцов, то есть 3 для v3 и 2 для v2.

Мотивация: Я хочу иметь возможность анализировать возвращаемое значение строки в реальном типе столбца. Действительно, моя схема говорит, что c3 - это datetime, который sqlite трактует как TEXT. Таким образом, sqlite3_column_type(s, 0) возвращает SQLITE3_TEXT, но метаданные таблицы (доступны из pragma table_info(T)) сохраняют строку datetime, которая является предполагаемым типом столбца. Зная это, я могу проанализировать возвращенную строку в соответствующее время Unix, начиная с эпохи, например.

Но как мне сопоставить индекс столбца запроса с индексом столбца таблицы:

  • столбец запроса 0 -> столбец таблицы 3
  • столбец запроса 1 -> столбец таблицы 2

Спасибо.

1 Ответ

1 голос
/ 18 января 2012

Вы можете использовать функцию sqlite C sqlite3_column_decltype, чтобы получить объявленный тип данных столбца из результата stmt? Он не дает конкретного ответа на ваш вопрос (получение индекса исходного столбца), но может быть альтернативным способом достижения того, что вам нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...