2013-11-01 41 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

非常感谢:)你真的帮了我。 –