使用带有sqlite(v 3.7.13)的C api,我试图列出当前连接的所有附加数据库:
sqlite3_stmt* pCompiledSql;
if(SQLITE_OK == sqlite3_prepare_v2(database, "PRAGMA database_list;", -1, &pCompiledSql, nullptr))
{
while(SQLITE_ROW == sqlite3_step(pCompiledSql))
{
const char* pName = reinterpret_cast<const char*>(sqlite3_column_text(pCompiledSql, 1));
const char* pFile = reinterpret_cast<const char*>(sqlite3_column_text(pCompiledSql, 2));
// Using pName and PFile...
}
}
其中,数据库是现有数据库的句柄,该数据库附加了多个数据库。相同的代码可以很好地与“ SELECT * FROM testtable;”之类的语句配合使用。
但是,使用编译指示进行的第一步调用将立即返回SQLITE_DONE。
我敢肯定,我已经看到了一些明显的问题,但是由于没有大量使用SQLite的经验,我现在陷入了困境……这里可能出什么问题了吗?
最佳答案
sqlite3_prepare_v2
的第四个参数是指向语句指针的指针,因此它不得为pCompiledSql
,而应为&pCompiledSql
。
您的编译器应该已经对此发出警告。