SQLite C API, может открыть БД, но не возвращает никаких данных с помощью Query? - PullRequest
1 голос
/ 26 июня 2011

Я пытаюсь использовать C API SQLite для открытия базы данных и доступа к некоторым записям.Кажется, что база данных открывается нормально, но я не получаю никаких результатов при попытке запроса (возвращено 0 строк).Тот же запрос работает в интерфейсе командной строки sqlite3 и других приложениях / интерфейсах sqlite.Я использую [http://www.sqlite.org/cintro.html] в качестве ссылки.

Мой код - это всего лишь два вызова функций.Вывод программы:

«Открытая БД»

«количество строк = 0».

Я не делаю здесь ничего сложного, поэтому я надеюсь, что я простосовершая простую ошибку где-то, чего я не вижу.Буду признателен за любую помощь.

-kf

int main()
{
// declare some vars
sqlite3* db_handle;
char sql[2048];     // for commands,queries and such
char* err_msg;
char** results;
int rows, columns;

// connect to database file
if (!(sqlite3_open_v2("../../Downloads/maps/ontario.sql", &db_handle, SQLITE_OPEN_READONLY, NULL)))
{
    std::cerr << "Could not connect to DB" << std::endl;
    std::cerr << "Error: " << sqlite3_errmsg(db_handle);
    sqlite3_close(db_handle);
    return -1;
}
else
{  std::cerr << "Opened DB" << std::endl;  }

// try sending query
strcpy(sql, "SELECT * FROM osm_node_tags LIMIT 10");
if(!(sqlite3_get_table(db_handle, sql, &results, &rows, &columns, &err_msg)))
{
    std::cerr << "Error: " << sqlite3_errmsg(db_handle);
    sqlite3_close(db_handle);
    return -1;
}
else
{
    std::cerr << "number of rows = " << rows;

    for (int i=1; i <= rows; i++)
    {  std::cerr << results[(i * columns) + 0] << std::endl;  }
}


return 1;
}

Ответы [ 2 ]

1 голос
/ 26 июня 2011

http://ray.bsdart.org/man/sqlite/c3ref/open.html

sqlite3_open_v2 возвращает SQLITE_OK (который равен нулю), когда он успешен. Я думаю, что ваши условия перевернуты.

0 голосов
/ 26 июня 2011

Я даже не вижу никаких неочевидных ошибок, поэтому заметим, что sqlite3_get_table говорит :

Это устаревший интерфейс, который сохранен для обратной совместимости. Использование этого интерфейса не рекомендуется.

но это действительно не должно быть сломано. Вы дважды проверили, что таблица содержит больше нуля?

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