/* 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总是失败。无法在SQLITE中准备INSERT语句,C API
更新: 我尝试了迄今为止的建议,但没有雪茄。 我创造了我能想到的最简单的情况下,用一个模式:
CREATE TABLE abc(a INTEGER);
,并在上述C代码,仍然不能正常工作,得到“无法编译声明” 了返回码26这显然意味着SQLITE_NOTADB
。所以看起来我的数据库文件不是......数据库文件。奇怪的是,我将不得不考虑这一点。
如果我使用“.dump”命令,sqlite CLI接受该文件并可以显示模式。
我将数据库文件名从“data.db”更改为“data.sqlite”。现在我得到的返回码为1,SQLITE_ERROR,而不是。
更新: 我在访问错误的文件,AKA user error。 接受在我未编辑的问题中指出语法错误的答案之一。
SQLite返回什么?你的代码似乎没问题。也许这是列/表名称不匹配或违反约束? – valdo 2010-10-18 08:21:26
@valdo,它是目前唯一的表格。 – 2010-10-18 08:38:05