C, как передать дескриптор базы данных sqlite3 - PullRequest
0 голосов
/ 24 марта 2012

Я пытаюсь сделать несколько утилит для использования с базами данных sqlite. Для этого я создаю файлы sqlite3_ut.h и sqlite3_ut.c

sqlite_ut.h

#ifndef sqlite3_ut_h
#define sqlite3_ut_h

#include <stdio.h>
#include "sqlite3.h"

int drop_table(sqlite3 handle);

#endif

sqlite_ut.c

int drop_table(sqlite3 handle)
{
int dropped = 0;
printf("Begin Drop\n");

sqlite3_exec(handle, "BEGIN;", NULL, NULL, NULL);
sqlite3_stmt *droptab;
if (sqlite3_prepare_v2(handle, "DROP TABLE mytable;", -1, &droptab, 0) != SQLITE_OK)
    printf("db error: %s\n", sqlite3_errmsg(handle));

if(droptab)
{
    sqlite3_step(droptab);
    dropped = 1;
}
else
    printf("Error: drop_table");

sqlite3_finalize(droptab);
sqlite3_exec(handle, "COMMIT;", NULL, NULL, NULL);

printf("End Drop\n");
return dropped;
}

sqlite_ut.h включен в основной файл.

sqlite3 *db;

int rc = sqlite3_open("m_test.db", &db);
if (rc)...

//error here
int dropped = drop_table(db);

Очевидно, я не могу правильно передать дескриптор открытой базы данных в функцию drop_table типа sqlite3.

Как это сделать с предложенной настройкой программы?

1 Ответ

2 голосов
/ 24 марта 2012

Дескрипторы SQLite3 имеют тип sqlite3 *, а не sqlite3. Переопределить drop_table следующим образом:

int drop_table(sqlite3 *handle) { … }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...