Как получить имена столбцов во время операции SELECT, которая возвращает ноль элементов в SQLite - PullRequest
0 голосов
/ 04 февраля 2012

Я звоню

sqlite3_exec(db, "SELECT a,b,Z FROM t1 WHERE t1.id = 1", func_ptr, arg_ptr)

для сбора содержимого строки и имен столбцов. Я пытаюсь создать универсальную вспомогательную функцию, которая будет принимать любую команду SELECT и создаст vector<vector<string>> с первой строкой, содержащей имена столбцов (а остальные содержат содержимое строк).

Но при этом не удается захватить имена столбцов, когда нет отображаемых строк, поскольку func_ptr вызывается только с одной или несколькими отображаемыми строками.

Как я могу получить имена столбцов, когда SELECT возвращает ноль строк? РЕДАКТИРОВАТЬ: Я бы предпочел не создавать уровень косвенности путем создания таблицы, а затем вызвать SELECT для этой таблицы. Благодарю. РЕДАКТИРОВАТЬ: Я хотел бы только собрать то, что содержит заявление SELECT.

1 Ответ

2 голосов
/ 04 февраля 2012

Вы можете использовать PRAGMA table_info(tablename);, чтобы получить набор результатов, который включает имя и тип столбца для данной таблицы.

Вызовите прагму, как и обычный запрос (т. Е. С *Например, 1006 *).

Если вам нужна эта информация для оператора SQL, который вы не сгенерировали самостоятельно, и который содержит выбор столбца, вам нужно использовать подготовленный оператор (вы все равно должны это делать).Затем вы можете использовать sqlite3_column_count и sqlite3_column_name для получения информации, которую вы ищете.

Пример использования:

sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2(db, "select a,b from t where 0=1", -1, &stmt, 0);
if( rc!=SQLITE_OK ){
    fprintf(stderr, "SQL error: %s\n", zErrMsg);
    sqlite3_free(zErrMsg);
}

int cols = sqlite3_column_count(stmt);
fprintf(stdout, "%d columns\n", cols);
for (int i=0; i<cols; i++)
    fprintf(stdout, "%d. %s\n", i, sqlite3_column_name(stmt, i));

// iterate over the results with sqlite3_step
// dispose of the statement with sqlite3_finalize

Вы можете адаптировать это для хранения имен столбцов в std::vector.

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