【问题标题】:When does the SQLite statement "PRAGMA database_list;" return an empty result set?SQLite 语句“PRAGMA database_list;”何时执行返回一个空的结果集?
【发布时间】:2013-11-26 16:02:51
【问题描述】:

使用带有 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...
  }
}

其中 database 是连接了多个数据库的现有数据库的句柄。相同的代码适用于诸如“SELECT * FROM testtable;”之类的语句。

但是,使用 pragma 调用,第一步调用只会立即返回 SQLITE_DONE。

我很确定我忽略了一些明显但没有太多 SQLite 经验的我现在卡住了......这里可能出了什么问题?

【问题讨论】:

  • 该代码对我有用。
  • 感谢您的确认,它帮助很大。所以如果上面的代码没问题,问题一定出在数据库的某个地方。无论如何,我必须继续前进并找到一种解决方法(我在附加数据库时保存了附加数据库的源路径和名称。)。再次感谢您的努力。

标签: c sqlite


【解决方案1】:

sqlite3_prepare_v2的第四个参数是指向语句指针的指针,所以不能是pCompiledSql,而是&amp;pCompiledSql

你的编译器应该已经警告你了。

【讨论】:

  • 我设法弄乱了问题中的代码,我的原始代码确实有 &。所以这不是问题。不过还是感谢您的尝试!
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多