Sqlite3 在数据库中插入数据在 c

时间:2021-02-14 16:09:06

标签: c database sqlite prepared-statement

   sqlite3_stmt *stmt;
   sqlite3_prepare_v2(db, "INSERT INTO links(NAME, LINK, SIZE, STARRED)  VALUES ('?' , '?', ? , 0);", 41, &stmt, NULL);
   if(stmt != NULL) {
      sqlite3_bind_text(stmt, 1, name, 0, SQLITE_TRANSIENT);
      sqlite3_bind_text(stmt, 2, link, 0, SQLITE_TRANSIENT);
      sqlite3_bind_int(stmt, 3, size);
      sqlite3_step(stmt);
      sqlite3_finalize(stmt);
   }else{
     printf("%sError during insertion in the database%s\n", RED, RST);
   }

  sqlite3_close(db);

我总是得到输出 Error during insertion in the database 但不明白为什么,可能与 sqlite3_prepare_v2 相关但不知道是什么,我尝试使用随机数据“手动”执行查询,然后它有效。

3 个答案:

答案 0 :(得分:1)

您绑定了语句的第 2 项和 ?缺少第 3 项。

答案 1 :(得分:1)

zSql 语句的大小为 69 个字符。我们最好将长度设为 -1,因为默认情况下它将是以空字符结尾的字符串,并且大小是自动计算的:

sqlite3_prepare_v2(db, "INSERT INTO links(NAME, LINK, SIZE, STARRED)  VALUES (?, ?, ? , 0);", -1, &stmt, NULL);

不要忘记第三个“?”在第三个参数的声明中。 编辑:写成?在声明中

答案 2 :(得分:0)

刚刚通过改变sqlite3_prepare_v2()的第三个参数即zSql的最大长度(以字节为单位)解决,47太小了。

相关问题