/* DATABASE INIT */
ret = sqlite3_open_v2(dbfile, &DB, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
if (SQLITE_OK != ret) {
printf("Could not open database.\n");
exit(1);
}
const char* zSql = "INSERT INTO abc VALUES (?)";
ret = sqlite3_prepare_v2(sites[DB, zSql, strlen(zSql), &s, NULL);
if (SQLITE_OK != ret) {
printf("Could not compile statement '%s', got %d.\n", zSql, ret);
exit(1);
}
好了,好了。怎么了? sqlite3_prepare_v2 总是失败。
更新: 到目前为止,我尝试了这些建议,但没有雪茄。 我用模式创建了我能想到的最简单的案例:
CREATE TABLE abc(a INTEGER);
和上面的 C 代码一样,仍然不起作用,得到“无法编译语句”
得到返回代码 26,这显然意味着 SQLITE_NOTADB
。所以我的数据库文件似乎不是……数据库文件。奇怪,我必须调查一下。
如果我使用“.dump”命令,sqlite CLI 接受该文件并可以显示模式。
我将数据库文件名从“data.db”更改为“data.sqlite”。现在我得到一个返回码 1,SQLITE_ERROR,而不是。
更新: 我访问了错误的文件,即 user error . 接受在我未经编辑的问题中指出语法错误的答案之一。
最佳答案
我觉得你应该试试
const char* zSql =
"INSERT INTO abc (moderation_status, phonenumber, email) VALUES(?,?,?)";
假设 moderation_status
phonenumber
和 email
是您表中字段的名称。
或:
const char* zSql = "INSERT INTO abc VALUES(?,?,?)";
?
是参数插入位置的占位符。
关于无法在 SQLITE、C API 中准备 INSERT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3955843/