用C创建SQLite3表,但得到一个空的数据库文件

时间:2012-10-17 01:33:12

标签: c database linux sqlite

这是我的代码:

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

#define DBFILE "./userinfo.db" //It's empty file

int main(int argc, char *argv[])
{
    int retval;
    sqlite3_stmt *stmt;
    sqlite3 *handle;

    retval = sqlite3_open(DBFILE, &handle);
    if(retval)
    {
        perror("sqlite3_open");
        exit(-1);
    }
    printf("Connection successful...\n");
    char create_table[] = "CREATE TABLE IF NOT EXISTS"
    "users(uname TEXT PRIMARY KEY, pass TEXT NOT NULL)";

    retval = sqlite3_exec(handle, create_table, 0, 0, 0);
    if (retval)
    {
        perror("sqlite3_exec");
        exit(-1);
    }
    sqlite3_close(handle);
    return 0;
}

我编译并运行它没有任何错误。

在运行之前,数据库文件userinfo.db是一个空文件

运行之后,我再次获得empty database file

为什么呢?桌子没有保存?

1 个答案:

答案 0 :(得分:2)

我明白了:

$ testprogram
Connection successful...
sqlite3_exec: No such file or directory

或,当文件已存在时:

$ testprogram
Connection successful...
sqlite3_exec: Success

原因是sqlite3_*函数未设置errno,这是perror输出的错误代码。

要输出SQLite错误消息,请使用sqlite3_errmsg

fprintf(stderr, "sqlite3_exec: %s\n", sqlite3_errmsg(handle));

有了这个,我得到了:

$ testprogram
Connection successful...
sqlite3_exec: near "EXISTSusers": syntax error