【问题标题】:Android On Delete Cascade not working properlyAndroid On Delete Cascade 无法正常工作
【发布时间】:2013-04-18 10:31:22
【问题描述】:

我正在制作 android 应用程序,其中我在一个开放的助手类中制作了 5 个表。当我的架构中有 ON DELETE CASCADE 时,我遇到了这个问题。我知道 ON DELETE CASCADE 的概念。这里我复制我的两张表之一。

private static final String MEDICINE_TABLE  = "create table medicine_details (_mid integer primary key autoincrement, "
                                                    + " medicine_name text, type text, take_with text, m_did integer not null,"
                                                    + "FOREIGN KEY(m_did) REFERENCES doctor_details(did)"
                                                    + " ON DELETE CASCADE" + ");";

private static final String SCH_TAB         = "CREATE TABLE schedule_details(sid INTEGER PRIMARY KEY AUTOINCREMENT, "
                                                    + "medi_stdate TEXT,medi_end_date TEXT,time_sch TEXT,rept TEXT, alarm_id NUMBER, "
                                                    + "u_id integer not null, doc_id integer not null, mid integer not null, "
                                                    + "FOREIGN KEY(u_id) REFERENCES member_details(_id)"
                                                    + " ON DELETE CASCADE,"
                                                    + "FOREIGN KEY(doc_id) REFERENCES doctor_details(did)"
                                                    + " ON DELETE CASCADE,"
                                                    + "FOREIGN KEY(mid) REFERENCES medicine_details(_mid)"
                                                    + " ON DELETE CASCADE" + ");";

每当我尝试从医学中删除时,它只会从医学表中删除,而不是从日程表中删除。这里的medicine 表是主表,schedule 表是子表。

【问题讨论】:

  • 你用的是什么安卓版本? SQLite 3.6.19+ 中添加了外键支持,该功能首先随 Android 2.2 Froyo 一起提供。
  • 我的sqlite版本是3.7.15.2
  • 你确定吗?对我来说这听起来不太可能。据我所知,Android 4.2“只有”sqlite 3.7.11。您是指嵌入在您的设备/模拟器中的 sqlite 还是您在开发 PC 上使用的以“离线”方式准备数据库文件的 sqlite?
  • 当我在 Firefox 中使用 SQL 管理器工具看到我的数据库时,它给了我这个 SQLite 版本,所以告诉我如何检查我的 SQLite 版本?
  • 看到这个stackoverflow.com/questions/2421189/…我正在使用4.0.3

标签: android sqlite cascade


【解决方案1】:

您必须重写方法open(),如下例所示:

    @Override
public void onOpen(SQLiteDatabase db) {
    super.onOpen(db);
    if (!db.isReadOnly()) {
        db.execSQL("PRAGMA foreign_keys=ON;");
    }
}

最好的问候

【讨论】:

    【解决方案2】:

    在您的数据库open() 方法中添加以下代码
    mDb.execSQL("PRAGMA foreign_keys=ON;");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多