gpt4 book ai didi

c - 为什么 sqlite 告诉我 "out of memory"?

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:26 29 4
gpt4 key购买 nike

我正在试验 sqlite3。我打算在多线程应用程序中使用它来解决线程之间共享数据的所有锁定和原子性问题。为了加快速度,并且因为我不需要在程序运行之间保存数据,我正在尝试使用内存数据库,该数据库大部分时间包含 < 100 行,最坏情况下 < 500 行。

我在 Ubuntu 12.04 x64 上运行,libsqlite3 版本为 3.7.9-2ubuntu1.1。

这是我的代码:

#include <stdio.h>
#include <sqlite3.h>

int main(int argc, char *argv[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;

rc = sqlite3_open_v2("file::memory:?cache=shared", &db, SQLITE_OPEN_FULLMUTEX, NULL);

/* This should never ever happen! */
if (rc != SQLITE_OK) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return(1);
}

rc = sqlite3_exec(db, "CREATE TABLE Players (id int, ip varchar(15), x int, y int);", NULL, NULL, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}

sqlite3_close(db);
return 0;
}

对于 sqlite3_open 行,我尝试了很多变体,但遇到了两个问题。当我尝试这些变体时,在我讽刺地评论为“永远不会发生”的部分中出现“内存不足”错误:

rc = sqlite3_open_v2("file::memory:?cache=shared", &db, SQLITE_OPEN_FULLMUTEX, NULL);
rc = sqlite3_open_v2(":memory:", &db, SQLITE_OPEN_FULLMUTEX, NULL);

当我尝试这个更简单的行时,它通过在磁盘上创建一个名为“file::memory:?cache=shared”的文件来违背文档:

rc = sqlite3_open("file::memory:?cache=shared", &db);

我到底做错了什么?

最佳答案

您可能需要 SQLITE_OPEN_READWRITESQLITE_OPEN_CREATE 标志。

您需要 SQLITE_OPEN_URI 标志来启用 URI 文件名。

关于c - 为什么 sqlite 告诉我 "out of memory"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463262/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com