1

Nachdem das Programm erfolgreich ausgeführt und ich .db Datei von Android Device Monitor extrahieren, kann ich alle meine Tabellen und Spalten für jede Tabelle außer der Spalte für Foreign key finden. Kann jemand warum dies geschieht? Ist etwas falsch mit meinem Query? Hier ist mein Code:Android SQLite ForeignKey Spalte nicht in der Datenbank gefunden

private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "datacollector.db"; 

private static final String Table_Survey = "SURVEY"; 
private static final String Survey_KEY_ID = "id"; 
private static final String Survey_KEY_NAME = "Survey_Name"; 
private static final String KEY_Table_Name = "Table_Name"; 


private static final String Table_formDetails = "FormDetails"; 
private static final String formDetails_KEY_ID = "id"; 
private static final String formDetails_field_Type="Field_Type"; 
private static final String formDetails_label = "Label"; 
private static final String formDetails_Options = "Options"; 

public DbHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

    String CREATE_SURVEY_TABLE = "CREATE TABLE " + Table_Survey + "(" 
      + Survey_KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + Survey_KEY_NAME + " VARCHAR(30)," 
      + KEY_Table_Name + " VARCHAR(50)" + ")"; 
    db.execSQL(CREATE_SURVEY_TABLE); 


    String CREATE_FORM_DETAILS_TABLE = "CREATE TABLE " + Table_formDetails + "(" 
      + formDetails_KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + formDetails_field_Type + " VARCHAR(30)," 
      + formDetails_Options + " VARCHAR(30)," 
      + formDetails_label + " VARCHAR(30)," 
      + " FOREIGN KEY ("+Survey_KEY_ID+") REFERENCES "+Table_Survey+"("+Survey_KEY_ID+"));"; 
    db.execSQL(CREATE_FORM_DETAILS_TABLE); 



} 

Antwort

2

sein, weil Sie nicht survey_key_id in CREATE_FORM_DETAILS_TABLE

String CREATE_FORM_DETAILS_TABLE = "CREATE TABLE " + Table_formDetails + "(" 
      + formDetails_KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + formDetails_field_Type + " VARCHAR(30)," 
      + formDetails_Options + " VARCHAR(30)," 
      + formDetails_label + " VARCHAR(30)," 
      + Survey_KEY_ID + " INTEGER," 
      + " FOREIGN KEY ("+Survey_KEY_ID+") REFERENCES "+Table_Survey+"("+Survey_KEY_ID+"));"; 
    db.execSQL(CREATE_FORM_DETAILS_TABLE); 
+0

Es gibt Fehler „doppelte Spaltenname: id (Code 1):, beim Kompilieren: Tabelle FormDetails CREATE (id INTEGER PRIMARY KEY AUTOINCREMENT, FIELD_TYPE VARCHAR (30), Optionen VARCHAR (30), Etikett VARCHAR (30) , ID INTEGER, FREMDSCHLÜSSEL (ID) REFERENZEN UMFRAGE (ID)) '' – Niroj

+0

+ Survey_KEY_ID + "INTEGER", ändern Sie den Namen hier und in Fremdschlüssel ("+ Survey_KEY_ID +") – Pavya

+0

Können Sie Ihren Code bearbeiten, bitte? – Niroj

2

Sie zuordnen gleichen Tabellenspalte an ausländische key.try dies nun hinzugefügt.

private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "datacollector.db"; 
private static final String Table_Survey = "SURVEY"; 
private static final String Survey_KEY_ID = "id"; 
private static final String Survey_KEY_NAME = "Survey_Name"; 
private static final String KEY_Table_Name = "Table_Name"; 
private static final String Table_formDetails = "FormDetails"; 
private static final String formDetails_KEY_ID = "id"; 
private static final String formDetails_field_Type="Field_Type"; 
private static final String formDetails_label = "Label"; 
private static final String formDetails_Options = "Options"; 

public DbHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_SURVEY_TABLE = "CREATE TABLE " + Table_Survey + "(" 
      + Survey_KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + Survey_KEY_NAME + " VARCHAR(30)," 
      + KEY_Table_Name + " VARCHAR(50)" + ")"; 
    db.execSQL(CREATE_SURVEY_TABLE); 
    String CREATE_FORM_DETAILS_TABLE = "CREATE TABLE " + Table_formDetails + "(" 
      + formDetails_KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + formDetails_field_Type + " VARCHAR(30)," 
      + formDetails_Options + " VARCHAR(30)," 
      + formDetails_label + " VARCHAR(30)," 
      + forign_Survey_KEY_ID + "INTEGER DEFAULT 0," 
      + " FOREIGN KEY ("+forign_Survey_KEY_ID+") REFERENCES "+Table_Survey+"("+Survey_KEY_ID+"));"; 
    db.execSQL(CREATE_FORM_DETAILS_TABLE); 
} 

+0

forign_Survey_KEY_ID, können Sie erklären, was ist das? Ich habe Fehler hier oder ist das nicht initialisiert? – Niroj

+0

müssen Sie haben e eine Spalte, die die IDs der Super-Tabelle speichert, so dass Sie eine Spalte erstellen müssen, um sie zu speichern.Ich habe den Code für Ihren Fehler bearbeitet, ** nicht initialisiert ** –

Verwandte Themen