我试图在VC++中使用sqlite3_prepare_v2(),但它给我错误26,即“文件不是数据库”。这令人困惑,因为我已成功打开数据库。

sqlite3 *testDb;
sqlite3_initialize();
std::string location =  uribase+"testDB.sqlite3";
auto rc = sqlite3_open_v2(location.c_str(), &testDb, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
if (rc != SQLITE_OK)
{
    logError(rc);
    sqlite3_close(testDb);
    sqlite3_shutdown();
    return -1;
}
else
{
    std::cout << "Database opened successfully.";
}
std::string tableName = "test";

std::string strstmt = "SELECT * FROM " + tableName + ";";
sqlite3_stmt *pstmt = NULL;
rc = sqlite3_prepare_v2(testDb, strstmt.c_str(), -1, &pstmt, NULL);
if (rc != SQLITE_OK)
{
    logError(rc);
    sqlite3_close(testDb);
    sqlite3_shutdown();
    return -1;
}

Output

最佳答案

在实际需要之前,SQLite不会访问该文件。 (在任何情况下,打开文件后,另一个应用程序都有可能损坏该文件。)

问题在于该文件确实不是数据库文件(或加密文件)。

09-30 17:00
查看更多