2013-11-01 47 views
0

我在這裏尋找幫助,我已經知道如何創建一個數據庫,但現在我想要做的就是添加外鍵,錯誤是因爲日誌貓表示語法錯誤_Lien_parenté_CM附近,什麼是解決方案嗎?用外鍵創建數據庫

private static final String MENAGE = "table_MENAGE"; 

private static final String _id = "Numero_du_Questionnaire"; 
private static final String _idquest = "Numero_Question"; 
private static final String _idquesting = "Numero_Quest"; 
private static final String col_Code_district = "Code_district"; 
private static final String col_Region= "region"; 
private static final String col_Provence_prefecture = "provence_prefecture"; 


private static final String Membres_de_Menage = "table_Membre_Menage"; 
private static final String col_N_Ordre = "Numero_Ordre"; 
private static final String col_Nom_prénom = "Nom_prénom"; 
private static final String col_Lien_parenté_CM = "Lien_parenté_CM"; 
private static final String col_Sexe = "Sexe"; 
private static final String col_Age = "Age "; 
private static final String col_Langue_maternelle = "Langue_maternelle "; 
private static final String col_Lieu_naissance = "Lieu_naissance "; 
private static final String col_Niveau_instruction = "Niveau_instruction "; 
private static final String col_branche_activité = "branche_activité "; 

android.database.sqlite.SQLiteException: near "Lien_parenté_CM": syntax error (code 1): , while compiling: CREATE TABLE table_Membre_Menage (Numero_Ordre INT NOT NULL PRIMARY KEY, Nom_prénom TEXT,Numero_Quest integer, FOREIGN KEY (Numero_Quest) REFERENCES table_MENAGE (Numero_du_Questionnaire),Lien_parenté_CM INT,Sexe INT,Age INT,Langue_maternelle INT,Lieu_naissance INT,Niveau_instruction INT,branche_activité INT) 

private static final String DATABASE_CREATE1 = "CREATE TABLE " + MENAGE + "(" + _id +" INTEGER PRIMARY KEY AUTOINCREMENT," 
     + col_Region +" TEXT,"+ col_Provence_prefecture +" TEXT," 
+ col_Commune_Arrondissement +" TEXT,"+ col_N_district +" INT "); 

    private static final String DATABASE_CREATE3 = "CREATE TABLE "+Membres_de_Menage+" (" +col_N_Ordre+" INT NOT NULL PRIMARY KEY, "+col_Nom_prénom+" TEXT," + _idquesting + " integer, " 
     + " FOREIGN KEY ("+ _idquesting +") REFERENCES "+MENAGE+" ("+_id+ ")," +col_Lien_parenté_CM+" INT,"+col_Sexe+" INT,"+col_Age+" INT,"+col_Langue_maternelle+" INT," 
+col_Lieu_naissance+" INT,"+col_Niveau_instruction+" INT,"+col_branche_activité+" INT "); 
+0

記錄該字符串以查看它在LogCat中的樣子。你可能會錯過一個空間或其他東西。 –

+0

我做了你告訴我的事情,你有想法嗎?謝謝 –

+0

編輯你的問題並顯示來自LogCat的字符串。 –

回答

0

這裏是SQLite的命令:

CREATE TABLE table_Membre_Menage ( 
    Numero_Ordre INT NOT NULL PRIMARY KEY, 
    Nom_prénom TEXT, 
    Numero_Quest integer, 
    FOREIGN KEY (Numero_Quest) REFERENCES table_MENAGE (Numero_du_Questionnaire), 
    Lien_parenté_CM INT,  <-------- location of error 
    Sexe INT, 
    Age INT, 
    Langue_maternelle INT, 
    Lieu_naissance INT, 
    Niveau_instruction INT, 
    branche_activité INT) 

首先,我發現安卓不允許你告訴SQLite的強制執行外鍵約束(setForeignKeyConstraintsEnabled()),除非你只支持API 16+。所以擁有它們是沒有用的。

其次,我仍然有他們在我的代碼。但是我把它們放在底部,畢竟是野外定義。我也在字段定義中聲明REFERENCES。

所以,試試這個:

變化

Numero_Quest integer, 

到:

Numero_Quest integer REFERENCES table_MENAGE (Numero_du_Questionnaire), 

然後,把外鍵線在底部。

這就是我所看到的與我所做的不同。

+0

非常感謝:)你真的幫了我。 –