SQLite 3与AM1808嵌入式Linux连接

时间:2012-10-06 07:04:14

标签: sql sqlite embedded-linux embedded-database

我已将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) )";

创建此表后,我删除了旧的数据库文件。

我仍然收到此错误。

3 个答案:

答案 0 :(得分:0)

INSERT命令中,您有39个列名,但只有38个NULL / ?值。

答案 1 :(得分:0)

CREATE TABLE IF NOT EXISTS

您更改了SQL DDL命令以创建表,但新命令从未运行,因为该表已存在。

您需要检查架构是否正确,导出数据,删除或重命名表,使用新的正确列列表创建表,以及导入旧数据(为新列提供适当的值)。

答案 2 :(得分:0)

很高兴知道您将SQLlite与AM1808处理器集成在一起。目前我正在做同样的事情。请让我知道如何获取SQLlite的源代码,如何为我们的处理器和示例应用程序编译它来从c创建,插入表等。