You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite3代码创建表后插入失败,提示表不存在问题求助

SQLite3 C程序无法创建表并插入数据的问题解决

你的代码核心错误是:只完成了SQL语句的编译准备,却没有实际执行这些语句。

sqlite3_prepare_v2()函数仅负责把SQL字符串编译成可执行的语句对象(sqlite3_stmt),并不会自动运行这条SQL。不管是创建表的CREATE TABLE还是插入数据的INSERT,都必须调用sqlite3_step()来触发执行,之后再用sqlite3_finalize()释放资源。

修正后的代码如下:

#include <sqlite3.h>
#include <stdio.h>

int main() {
  int rc;
  sqlite3_stmt* stmt;
  sqlite3* db;
  rc = sqlite3_open("/tmp/test_second.db", &db);
  if (rc) {
     printf("Failed to open sqlite3 database: %s\n", sqlite3_errmsg(db));
     return 1;
  }

  // 创建表:prepare后执行step
  rc = sqlite3_prepare_v2(db, "CREATE TABLE sample (anum INTEGER PRIMARY KEY); ", -1, &stmt, NULL);
  if (rc != SQLITE_OK) {
       printf("Failed to create table: %s\n", sqlite3_errmsg(db));
       return 1;
  }
  rc = sqlite3_step(stmt);
  if (rc != SQLITE_DONE && rc != SQLITE_ROW) { // CREATE语句执行完返回SQLITE_DONE
       printf("Failed to execute create table: %s\n", sqlite3_errmsg(db));
       sqlite3_finalize(stmt);
       sqlite3_close(db);
       return 1;
  }
  sqlite3_finalize(stmt);

  // 插入数据:同样需要step执行
  rc = sqlite3_prepare_v2(db, "INSERT INTO sample (anum) VALUES (0); ", -1, &stmt, NULL);
  if (rc != SQLITE_OK) {
       printf("Failed to insert row: %s\n", sqlite3_errmsg(db));
       sqlite3_close(db);
       return 1;
  }
  rc = sqlite3_step(stmt);
  if (rc != SQLITE_DONE) { // INSERT执行完返回SQLITE_DONE
       printf("Failed to execute insert: %s\n", sqlite3_errmsg(db));
       sqlite3_finalize(stmt);
       sqlite3_close(db);
       return 1;
  }
  sqlite3_finalize(stmt);
  
  // 关闭数据库前检查状态
  rc = sqlite3_close(db);
  if (rc != SQLITE_OK) {
      printf("Failed to close database: %s\n", sqlite3_errmsg(db));
      return 1;
  }

  return 0;
}

补充说明:

  • sqlite3_step()的返回值需要判断:对于无结果集的语句(如CREATE、INSERT),执行成功会返回SQLITE_DONE;对于查询类语句(如SELECT),成功会先返回SQLITE_ROW表示有结果行,结果读完后返回SQLITE_DONE。
  • 为什么sqlite3 Shell里可以正常执行?因为Shell会自动完成「准备+执行+清理」的完整流程,而C API需要手动调用每一步。

内容的提问来源于stack exchange,提问作者Zenul_Abidin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:45:16