thl*_*ood 0 c database linux sqlite
我的代码很简单,只需创建一个空表.这是我的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到此错误消息:
Out of memory
我调试了这段代码,我发现sqlite3_open_v2已经返回21(库使用不正确)
怎么解决?
从精细手册:
在
flags以参数sqlite3_open_v2()可以采取以下三个值之一,[...]
SQLITE_OPEN_READONLY
数据库以只读模式打开.如果数据库尚不存在,则返回错误.
SQLITE_OPEN_READWRITE
如果可能,将打开数据库以进行读写,或仅在文件受操作系统写保护时才读取数据库.在任何一种情况下,数据库必须已存在,否则返回错误.
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
打开数据库进行读写,如果数据库尚不存在则创建.这是始终用于sqlite3_open()和的行为sqlite3_open16().
所以你不能只使用SQLITE_OPEN_CREATE,你需要包含该SQLITE_OPEN_READWRITE位,如果你想要它来创建文件:
retval = sqlite3_open_v2("v2.db", &ppdb,
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, "unix-none");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1109 次 |
| 最近记录: |