0

我的代码很简单,只创建一个空表。这是我的代码:

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

int main(int argc, char *argv[])
{
    sqlite3 *ppdb;
    int retval;

    retval = sqlite3_open_v2("v2.db", &ppdb, 
                        SQLITE_OPEN_CREATE, "unix-none");
    if (retval != SQLITE_OK)
    {
        printf(stderr, "%s\n", sqlite3_errmsg(ppdb));
        return 1;
    }
    retval = sqlite3_exec(ppdb, 
             "CREATE TABLE IF NOT EXISTS userinfo \
             (id TEXT PRIMARY KEY, pass TEXT NOT NULL)",
             NULL, NULL, NULL);
    if (retval != SQLITE_OK)
    {
        fprintf(stderr, "%s\n", sqlite3_errmsg(ppdb));
        return 1;
    }
    sqlite3_close(ppdb);
    return 0;
}

但是当我运行它时,我收到了这个错误信息:

Out of memory

我调试这段代码,我发现sqlite3_open_v2已经返回21(库使用不正确)

如何解决?

4

1 回答 1

7

来自精美手册

flags参数 to可以采用sqlite3_open_v2()以下三个值之一,[...]:

SQLITE_OPEN_READONLY
数据库以只读模式打开。如果数据库尚不存在,则返回错误。

SQLITE_OPEN_READWRITE
如果可能,打开数据库进行读取和写入,或者仅在文件受操作系统写保护时才读取。无论哪种情况,数据库都必须已经存在,否则返回错误。

SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
数据库以读写方式打开,如果不存在则创建。这是始终用于sqlite3_open()和的行为sqlite3_open16()

所以你不能使用 just ,如果你想让它创建文件SQLITE_OPEN_CREATE,你需要包含这个位:SQLITE_OPEN_READWRITE

retval = sqlite3_open_v2("v2.db", &ppdb,
                    SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, "unix-none");
于 2012-10-20T04:43:10.787 回答