首先,请原谅我的近似英语。
我有2个表,一个(tb_facture),外键引用第二个(tb_garage)
我的问题是我不能在没有提供引用tb_garage的外键的情况下插入tb_facture。
如果我提供有效的外键,则没有问题。但是如果我尝试给-1(或其他东西),它就不会插入。
我必须能够这样做,因为在我的应用程序中,没有义务将车库链接到发票。
这是插入代码:
private void saveState(){
String libelleFac = etLibelleFac.getText().toString();
String dateFac = tvDateAfficheeFac.getText().toString();
String kmFac = etKmFac.getText().toString();
String remarqueFac = etRemarqueFac.getText().toString();
float montantFac = Float.parseFloat(etMontantFac.getText().toString());
String datePaieFac = tvDateAfficheePaiement.getText().toString();
if(mRowId == null){
if (cbGarageFac.isChecked()){
db.insererFacture(itemSpListeVhc, itemSpListeGar, dateFac, libelleFac, remarqueFac, kmFac, montantFac, datePaieFac);
}
else{
db.insererFacture(itemSpListeVhc, -1, dateFac, libelleFac, remarqueFac, kmFac, montantFac, datePaieFac);
}
}
}
如果我用有效的外键或itemSpListeGar替换-1,它就可以工作。
这是我的问题:
public long insererFacture(long fkVhcFac, long fkGarFac, String dateFac, String libelleFac, String remarqueFac, String kmFac, float montantFac, String datePaieFac){
ContentValues values = new ContentValues();
values.put("fk_vhc_fa", fkVhcFac);
values.put("fk_gar_fa", fkGarFac);
values.put("date_fa", dateFac);
values.put("libelle_fa", libelleFac);
values.put("remarque_fa", remarqueFac);
values.put("kilometrage_fa", kmFac);
values.put("montant_fa", montantFac);
values.put("date_paie_fa", datePaieFac);
return db.insert("TB_FACTURE", null, values);
}
感谢您的帮助!
PS:我指定我不使用真正的FOREIGN KEYS,但触发方法是这样的:
"fk_gar_fa INTEGER CONSTRAINT ct_fk_gar_fa REFERENCES TB_GARAGE(_id),"
答案 0 :(得分:0)
你不能绕过这个,强制referential integrity是关系数据库的基础!
在你的情况下,我建议制作一个说“没有车库”的车库记录。在Facture表中添加没有关联车库的记录时,使用它的主键作为外键。
这有点难看,但要么是这样,要么你改变你的关系数据库不再强制完整性,你就会打开一堆新的蠕虫。 :)