android sqlite触发器,Android Sqlite触发器操作经过

这是我的第一个表,它具有3列,所有列均由用户输入.没有并发症,它可以正常工作.但是还有另一个表,它依赖于该表的第3列.即在“房间号”列上.请忽略名称约定,因为我没有真正遵循任何命名约定.

这是我的第二张桌子,正如您所看到的,它的最后一列是房间号.请忽略名称约定.这个房间号列是外键,它取决于第一个表的输入或删除

现在,我为第二张表创建了一个架构.它声明有5列,最后一列是外键.

private static final String DATABASE_CREATE_NOTES_ID_TABLE =

("CREATE TABLE "+ DATABASE_NOTES_TABLE +" ("+ KEY_ROWID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+

KEY_TIME + " TEXT, "+

KEY_NOTES + " TEXT, "+

KEY_DATE + " TEXT, " +

KEY_ROOMS + " INTEGER , FOREIGN KEY (" + KEY_ROOMS + ") REFERENCES " + DATABASE_PATIENT_TABLE +" (" +KEY_ROOM_NUMBER+ "));");

您看到的表已成功创建.

现在,我必须编写一条TRIGGER语句,基于该语句,当我从第一个表中删除房间号时,则应该删除第二个表中所有具有相同房间号的行.如果我在第一个表中添加了新的房间号,则应在第二个表中添加它.

我写的插入新房间号的触发语句如下

db.execSQL("CREATE TRIGGER fk_notesTable_roomNumber " +

" BEFORE INSERT "+

" ON "+DATABASE_NOTES_TABLE+

" FOR EACH ROW BEGIN"+

" SELECT CASE WHEN ((SELECT "+KEY_ROOM_NUMBER+" FROM "+DATABASE_PATIENT_TABLE+" WHERE "+KEY_ROOM_NUMBER+"=new."+KEY_ROOMS +" ) IS NULL)"+

" THEN RAISE (ABORT,'Foreign Key Violation') END;"+

" END;");

我已在数据库文件的onCreate()中添加了这段代码.我还要做什么?这里什么都没有发生.

请好心指出我犯错的地方.

谢谢,

斯海斯塔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值