这是我的代码:
#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
。
为什么呢?桌子没有保存?
答案 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