Android SQLite和外键没有引用错误

时间:2016-05-03 08:58:46

标签: android sqlite

您好我在我的Android应用程序中实现了一个SQLite数据库,这是一个例子:

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中使用外键,当我在添加“Frenquence_activite”之前尝试添加“Utilisateur”时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 个答案:

答案 0 :(得分:0)

您可以尝试"FOREIGN KEY (" + KEY_ID_FREQUENCE_ACTIVITE + ") REFERENCES " + TABLE_FREQUENCE_ACTIVITE + "(" + KEY_ID + "));";

我认为如果你有很多桌子,你应该尝试给出更好的名字(而不是KEY_ID)。

希望它会有所帮助

答案 1 :(得分:0)

表示表未正确引用。 您是否使用SQLite浏览器查看表格内容?如果没有,请尝试此http://sqlitebrowser.org/

您可以在此处了解有关外键的更多信息 http://www.sqlite.org/foreignkeys.html

答案 2 :(得分:0)

在SQLite中,默认情况下禁用外键。无论何时打开与数据库的新连接,都需要在执行其他语句之前运行以下命令:

db.execSQL("PRAGMA foreign_keys=ON")

否则它不会考虑您的外键约束