Sqlite3给出“错误:约束失败” - 与AM1808接口

时间:2013-02-22 06:45:09

标签: sqlite embedded-database

您好我正在使用sqlite3进行AM1808的数据库管理。 我创建了一个名为MilkRateChartEditDetail的新表。

const char *SQL_CREATE_MILKRATECHARTDETAILEDITTABLE   = 
"CREATE TABLE IF NOT EXISTS MilkRateChartEditDetail ( \
    MilkRateChartEditDetailId   INTEGER, \
    MilkRateChartId         INTEGER \
        REFERENCES MilkRateChart(MilkRateChartId) \
        ON UPDATE RESTRICT ON DELETE RESTRICT, \
    EffectiveDate           DATE, \
    EffectiveShift          UNSIGNED TINYINT, \
    MilkType                UNSIGNED TINYINT, \
    RCD_RateChartId         UNSIGNED INT,\
    SocietyCode             STRING, \
    RateType                STRING, \
    FAT                     FLOAT, \
    LRCLR                   FLOAT, \
    SNF                     FLOAT, \
    Solid                   FLOAT, \
    Rate                    FLOAT, \
    NewRate                 FLOAT, \
    UpdatedBy               INTEGER \
        REFERENCES UserMaster(UsermasterId) \
        ON UPDATE RESTRICT ON DELETE RESTRICT, \
    UpdatedOn               DATE, \
    FlagGSM                 UNSIGNED TINYINT, \
    FlagUSB                 UNSIGNED TINYINT, \
    PRIMARY KEY (MilkRateChartEditDetailId))";

现在我正在尝试使用以下查询将数据插入表中。

const char *INSERT_MILKRATECHARTEDITDETAILTABLE =
    "INSERT INTO MilkRateChartEditDetail \
         (MilkRateChartEditDetailId,MilkRateChartId, \
         EffectiveDate,EffectiveShift,MilkType, \
         RCD_RateChartId,SocietyCode,RateType, \
         FAT,LRCLR,SNF,Solid,Rate,NewRate, \
         UpdatedBy,UpdatedOn,FlagGSM,FlagUSB) \
     VALUES(NULL,?,?,?,?,?,?,?,?,?,?,?,?,?,NULL,?,?,?)";

我的数据是:

RateChartId : 1
EffectiveDate : 10-12-2012
Shift : E
RateType : FAT
MilkRateChartId : 30
FAT : 11.100000
SNF : 0.000000
Solid : 0.000000
CLR : 0.000000
Updatedby : 1
MilkType : C
Rate : 0.000000
NewRate : 0.000000

我收到错误:

  

INSERT MILKRATECHARTEDITDETAILTABLE,ENTRY:'约束失败'

我无法理解这是什么问题? 我怎么能摆脱这个?

1 个答案:

答案 0 :(得分:0)

您设置了很少的外键(简称FK)约束,并且您还有主键约束。

如果您尝试使用相同的主键(MilkRateChartEditDetailId)插入记录,或者使用外部表中不存在的FK(MilkRateChartIdUpdatedBy)的某些值,您将收到此错误消息。

解决方案是仔细查看这些FK和PK是否正确使用,或者放弃它们。