Android SQLite и внешний ключ нет ошибок ссылок

Привет я реализую базу данных SQLite в моем приложении Android, вот exemple:

private static final String TABLE_FREQUENCE_ACTIVITE = "frequence_activite";
private static final String FREQUENCE_ACTIVITE_TABLE_CREATE = "create table "
        + TABLE_FREQUENCE_ACTIVITE + " ("
        + KEY_ID + " Integer PRIMARY KEY autoincrement, "
        + KEY_LIBELLE + " Varchar (25) NOT NULL);";


private static final String TABLE_UTILISATEURS = "utilisateurs";
private static final String KEY_PSEUDO = "pseudo";
private static final String KEY_INDICE_CALORIQUE = "indice_calorique";
private static final String KEY_AGE = "age";
private static final String KEY_GENRE = "genre";
private static final String KEY_TAILLE = "taille";
private static final String KEY_TAUX_MASSE_GRASSE = "taux_masse_grasse";
private static final String KEY_ID_FREQUENCE_ACTIVITE = "id_frequence_activite";
private static final String UTILISATEURS_TABLE_CREATE = "create table "
        + TABLE_UTILISATEURS + " ("
        + KEY_ID + " Integer PRIMARY KEY autoincrement, "
        + KEY_PSEUDO + " Varchar (25) NOT NULL ,"
        + KEY_INDICE_CALORIQUE + " Integer, "
        + KEY_AGE + " Datetime NOT NULL,"
        + KEY_GENRE + " Char (1) NOT NULL,"
        + KEY_TAILLE + " INTEGER NOT NULL,"
        + KEY_TAUX_MASSE_GRASSE + " INTEGER,"
        + KEY_ID_FREQUENCE_ACTIVITE + " INTEGER REFERENCES "+TABLE_FREQUENCE_ACTIVITE+"("+KEY_ID+"));";

Я только что нашел в google, как использовать внешний ключ в Android, и когда я пытаюсь добавить «Utilisateur» перед добавлением «Frenquence_activite» Android не дает ошибки ссылок, я не понимаю, почему, потому что если я добавлю «Utilisateur» перед добавлением одной строки в «frenquence_activite» я должен получить ошибку.

    db.addUtilisateur(new Utilisateurs("benjyspider",4000,sdf.format(date),"M",177,12,1));

Как Добавить пользователя:

void addUtilisateur(Utilisateurs utilisateur) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(KEY_PSEUDO, utilisateur.getPseudo());
    values.put(KEY_INDICE_CALORIQUE, utilisateur.getIndice_calorique());
    values.put(KEY_AGE, utilisateur.getAge());
    values.put(KEY_GENRE, utilisateur.getGenre());
    values.put(KEY_TAILLE, utilisateur.getTaille());
    values.put(KEY_TAUX_MASSE_GRASSE, utilisateur.getTaux_masse_grasse());
    values.put(KEY_ID_FREQUENCE_ACTIVITE, utilisateur.getId_frequence_activite());
    // Inserting Row
    db.insert(TABLE_UTILISATEURS, null, values);
    db.close(); // Closing database connection
}

3 ответа

  1. вы можете попробовать"FOREIGN KEY (" + KEY_ID_FREQUENCE_ACTIVITE + ") REFERENCES " + TABLE_FREQUENCE_ACTIVITE + "(" + KEY_ID + "));";

    Я думаю, что вы должны попытаться дать лучшее имя (вместо KEY_ID), если у вас есть много таблицы.

    Надеюсь, это поможет

  2. В SQLite внешние ключи отключены по умолчанию. При открытии нового подключения к базе данных перед выполнением других инструкций необходимо выполнить следующие инструкции:

    db.execSQL("PRAGMA foreign_keys=ON")
    

    В противном случае не учитываются ограничения внешнего ключа