无法在 SQLITE、C API 中准备 INSERT 语句

标签 c sqlite

  /* 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 phonenumberemail 是您表中字段的名称。

或:

const char* zSql = "INSERT INTO abc VALUES(?,?,?)";

? 是参数插入位置的占位符。

关于无法在 SQLITE、C API 中准备 INSERT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3955843/

相关文章:

c++ - C99 和 C++ 的内联函数的兼容定义

c - 如何在没有任何段错误的情况下在此函数中分配内存

java - Android - 创建篮球统计屏幕

android - 如何通知数据从 sqlite 更改为回收站 View ?

sqlite - LINQPad 在 C# 查询中创建 sqlite 数据库

即使结果集为空,SQLite 也会强制打印标题

c# - 如何将 DataGridView 绑定(bind)到 SQLite 数据库?

c - 为什么我在 Xcode 中处理字符串时没有遇到错误?

c - 在 C++ 模式下将 'c' 输入视为 'c++'

c - 用 c 编写基本 shell 时使用信号处理程序时出现段错误