c - 在 C 中使用 SQLite 的 INSERT INTO 时遇到问题

标签 c database sqlite

因此,我尝试使用 C 语言中的 SQLite 将数据插入表中。每当我执行此操作而不指定要插入数据的列时,插入都会正常工作。但是,我想在我的列之一中使用主键属性,因此我尝试使用 INSERT INTO 表名(列)VALUES(值)方法,但它不起作用。

表创建:

snprintf(sql_query,sizeof(sql_query), "CREATE TABLE IF NOT EXISTS %s(%s INTEGER PRIMARY KEY,%s TEXT NOT NULL, %s TEXT NOT NULL, %s TEXT NOT NULL,%s REAL NOT NULL, %s REAL NOT NULL, %s REAL NOT NULL);",tbl_id1,tbl_col1,tbl_col2,tbl_col3,tbl_col4,tbl_col5,tbl_col6,tbl_col7);
rc = sqlite3_exec(db, sql_query, callback, 0, NULL);

插入:

sprintf(sql, "INSERT INTO %s (%s,%s,%s,%s,%s,%s)  VALUES ('%d/%d/%d','%d:%d:%d','4','%d','%d','7');",tbl_id1,tbl_col2,tbl_col3,tbl_col4,tbl_col5,tbl_col6,tbl_col7,year,month,day,hour,min,sec,peak,real);
int ic = sqlite3_exec(db, sql, callback, 0, NULL);

正如我所说,如果我在不指定要插入数据的列的情况下执行此操作,效果会很好。

编辑:Names of my variables

#define db_name     "db_test.db"
#define tbl_id1     "Meter1"
#define tbl_id2     "Meter2"
#define tbl_id3     "Meter3"
#define tbl_col1    "Run[#]"
#define tbl_col2    "Date[YY-MM-DD]"
#define tbl_col3    "Time[HH:MM:SS]"
#define tbl_col4    "Accept[True/False]"
#define tbl_col5    "F_Peak[N/cm]"
#define tbl_col6    "m_Peak[g]"
#define tbl_col7    "Cycle[s]"

最佳答案

问题出在列名称中。对于给定的值,sqlite3_exec 返回 SQLITE_ERROR (1) 而不是 SQLITE_OK (0)。

在 INSERT 查询中使用不带括号的列名(以及其中的所有内容)。对于您的示例,请使用以下列名称:

#define tbl_col1_clear    "Run"
#define tbl_col2_clear    "Date"
#define tbl_col3_clear    "Time"
#define tbl_col4_clear    "Accept"
#define tbl_col5_clear    "F_Peak"
#define tbl_col6_clear    "m_Peak"
#define tbl_col7_clear    "Cycle"

关于c - 在 C 中使用 SQLite 的 INSERT INTO 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51971609/

相关文章:

c - 栈中auto变量占用的内存空间是多少

database - 如何使用带外键的 Slick 映射表?

java - 选择数据库行的优化方法是什么?

c++ - sqlite3 - 保持打开处理程序 VS,在需要时打开数据库

java - Android Room Persistence Library - 如何查找 ID 列表中包含 ID 的实体?

c - 如何在 C 中使用正则表达式查找文件中的一行?

c - 将 C 代码从较大数组写入 "remove"子数组时出现内存错误

c - 如何在 C 中初始化结构?

mysql - 使用 mysql 获取过去 12 个月的数据

sqlite - SQLite多次插入选择结果