SQLite C API,可以打开数据库,但不能使用Query返回任何数据?

时间:2011-06-26 04:09:47

标签: c api sqlite

我正在尝试使用SQLite的C API打开数据库并访问一些记录。它似乎打开数据库很好,但我在尝试查询时没有得到任何结果(返回0行)。相同的查询在sqlite3 CLI和其他sqlite apps / frontends中有效。我正在使用[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 个答案:

答案 0 :(得分:1)

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

sqlite3_open_v2成功后返回SQLITE_OK(为零)。我认为你的条件是颠倒的。

答案 1 :(得分:0)

我甚至看不到任何不那么明显的错误,所以请注意sqlite3_get_table says

  

这是为保持向后兼容性而保留的旧版界面。建议不要使用此界面。

但它真的不应该被打破。您是否仔细检查过该表实际上是否包含多于零的行?