我已将SQLite3与我的Am1808处理器连接起来。我将数据存储在SD卡中。
工作得非常好。我已经为38个字段插入了一个表。现在我想在同一个表中添加一列。所以我更改了表字段参数,并在相关文件中进行相应的更改。 我的代码已成功编译,但是当我执行应用程序时,它给出了以下错误:
错误:“38列为39个值”
这是我通过修改创建的表:
const char *SQL_CREATE_ABCTABLE = "CREATE TABLE IF NOT EXISTS MilkCollection \
( MilkCollectionId INTEGER, \
CollectionDate DATE, \
CollectionShift UNSIGNED TINYINT, \
MemberId INTEGER REFERENCES Member(MemberId) ON UPDATE RESTRICT ON DELETE RESTRICT, \
SocietyId INTEGER REFERENCES Society(SocietyId) ON UPDATE RESTRICT ON DELETE RESTRICT, \
SampleNo UNSIGNED INTEGER, \
MilkType UNSIGNED TINYINT, \
Qty FLOAT, \
ActualQty FLOAT, \
QtyType UNSIGNED TINYINT, \
Fat FLOAT, \
ActualFat FLOAT, \
LRCLR FLOAT, \
ActualLRCLR FLOAT, \
SNF FLOAT, \
ActualSNF FLOAT, \
Solid FLOAT, \
ActualSolid FLOAT, \
Water FLOAT, \ // I have inserted this field
FatKG FLOAT, \
ActualFatKG FLOAT, \
SNFKG FLOAT, \
ActualSNFKG FLOAT, \
Rate FLOAT, \
Amount FLOAT, \
ActualAmount FLOAT, \
CanNumber UNSIGNED INTEGER, \
MemberCodeAuto UNSIGNED TINYINT, \
WeightAuto UNSIGNED TINYINT, \
FatAuto UNSIGNED TINYINT, \
LRCLRAuto UNSIGNED TINYINT, \
SNFAuto UNSIGNED TINYINT, \
EntryMode UNSIGNED TINYINT, \
CreatedBy INTEGER REFERENCES UserMaster(UsermasterId) ON UPDATE RESTRICT ON DELETE RESTRICT, \
CreatedOn DATE, \
UpdatedBy INTEGER REFERENCES UserMaster(UsermasterId) ON UPDATE RESTRICT ON DELETE RESTRICT, \
UpdatedOn DATE, \
FlagGSM UNSIGNED TINYINT, \
FlagUSB UNSIGNED TINYINT, \
PRIMARY KEY (MilkCollectionId) )";
创建此表后,我删除了旧的数据库文件。
我仍然收到此错误。
答案 0 :(得分:0)
在INSERT
命令中,您有39个列名,但只有38个NULL
/ ?
值。
答案 1 :(得分:0)
CREATE TABLE
的 IF NOT EXISTS
强>
您更改了SQL DDL命令以创建表,但新命令从未运行,因为该表已存在。
您需要检查架构是否正确,导出数据,删除或重命名表,使用新的正确列列表创建表,以及导入旧数据(为新列提供适当的值)。
答案 2 :(得分:0)
很高兴知道您将SQLlite与AM1808处理器集成在一起。目前我正在做同样的事情。请让我知道如何获取SQLlite的源代码,如何为我们的处理器和示例应用程序编译它来从c创建,插入表等。