SQLite AUTOINCREMENT插入报错:列数不匹配问题咨询
问题原因及解决方法
你的核心问题是使用VALUES子句时未指定目标列名:当你省略列名列表直接写INSERT INTO 表名 VALUES(...)时,SQLite要求你提供与表中所有列(包括主键列)完全匹配数量的值,哪怕主键是AUTOINCREMENT类型。
你的表journalData有6列,但VALUES里只传了5个值,这就触发了table journalData has 6 columns but 5 values were supplied错误——和你之前是否插入过带主键的行无关。
正确的两种写法:
1. 明确指定要插入的列(跳过主键列)
这是最推荐的写法,清晰且不易出错:
INSERT INTO `journalData` (`JD_Event_Key`, `JD_VarCount`, `JD_VarTypes`, `JD_VarValues`, `JD_EventDate`) VALUES (0, '', '', '', '04.02.2023 20:26:18');
注意:JD_VarCount是INTEGER类型,你传入的空字符串''会被SQLite自动转换为0;如果需要表示“无值”,建议改为NULL。
2. 保留无列名的VALUES写法(需包含主键列)
如果不想指定列名,要么给主键列传NULL(让SQLite自动生成自增ID),要么传入合法的未使用过的主键值:
-- 传NULL让SQLite自动生成主键 INSERT INTO `journalData` VALUES (NULL, 0, '', '', '', '04.02.2023 20:26:18'); -- 或者传入指定的主键值(确保该值未被占用) INSERT INTO `journalData` VALUES (24, 0, '', '', '', '04.02.2023 20:26:18');
补充说明
你参考的教程中“不指定主键列即可插入”的示例,本质是通过指定其他列名来跳过主键列,而非直接省略列名列表传值——这是你误解的地方。
内容的提问来源于stack exchange,提问作者ZecosMAX
相关产品推荐
相关产品推荐

