Android sqlite 级联删除更新

============问题描述============


大概是一个租房管理系统,我要求的是
delete from house where houseName = ? 之后,可以级联删除与该houseName有关的内容
This is my tables building in java:


public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sqlhouse = "create table house (houseName char(20) primary key, number int not null);";
db.execSQL(sqlhouse);
String sqlroom = "create table room(houseName char(20),roomNumber integer ,waterConsumption int not null"
+ ",electricityConsumption int not null,primary key(houseName,roomNumber),"
+ "foreign key (houseName) references house (houseName) on delete cascade on update cascade);";
db.execSQL(sqlroom);
String sqlrenter = "create table renter(Id char(18) primary key,name char(20) not null,phoneNumber char(11) not null)";
db.execSQL(sqlrenter);
String sqlcheckindocument = "create table CheckInDocument(Id char(18),houseName char(20),roomNumber int,deposit int not null,rental int not null,startingDate Date not null,surfing int not null,waterFare float not null,electricityFare float not null,totalAmount float,primary key (houseName,roomNumber),foreign key (Id) references renter(Id) on delete cascade on update cascade,foreign key(houseName,roomNumber) references room(houseName,roomNumber) on delete cascade on update cascade)";
db.execSQL(sqlcheckindocument);
String sqlcheckoutdocument = "create table checkOutDocument(houseName char(20),roomNumber char(10),checkOutDate Date not null,amount int,waterConsumption int not null,electricityConsumption int not null,"
+ "primary key (houseName,roomNumber),foreign key(houseName,roomNumber) references room(houseName,roomNumber) on delete cascade on update cascade)";
db.execSQL(sqlcheckoutdocument);
String sqlrentingdocument = "create table rentingDocument(houseName char(20),roomNumber char(10),waterConsumption int not null,electricityConsumption int not null,rentingDate Date not null,amount int not null,"
+ "primary key (houseName,roomNumber),foreign key(houseName,roomNumber) references room(houseName,roomNumber) on delete cascade on update cascade)";
db.execSQL(sqlrentingdocument);
}

在手机上运行后,我把数据库导入电脑的sqlite3,y然后执行删除语句,完全没问题。
但是在手机上,我执行删除houseName之后,发现不能实现级联删除,请大神指点!!!!!

============解决方案1============


1.
试一下在打开数据库以后执行db.execSQL("PRAGMA foreign_keys=ON");这个语句的作用是打开外键支持。
2.
或者在一个事务里从各个表删除记录。

============解决方案2============


sqlite自从3.6.19之后才支持外键,但是android在2.1之前都是用的sqlite3.5,为了兼容老版本的,在android里的sqlite外键默认关闭

如果你确定你支持支android2.2以上的应用,那么你就可以在执行以下db.execSQL("PRAGMA foreign_keys=ON");手动打开支持

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。