1

После того, как программа выполняется успешно и я извлекаю файл .db с устройства Android Монитор устройства, я могу найти все мои таблицы и столбцы для каждой таблицы, кроме столбца для Foreign key. Может ли кто-нибудь, почему это происходит? Что-то не так с моим Query? Вот мой код:Android SQLite ForeignKey Column не найден в базе данных

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); 



} 

ответ

2

его, потому что вы не добавили survey_key_id в 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

Существует ошибка «повторяющееся имя столбца: идентификатор (код 1):, при компиляции: CREATE TABLE FormDetails (ID INTEGER PRIMARY KEY Autoincrement, field_type VARCHAR (30), параметры VARCHAR (30), Этикетка VARCHAR (30) , id INTEGER, FOREIGN KEY (id) ССЫЛКИ SURVEY (id)); '' – Niroj

+0

+ Survey_KEY_ID + "INTEGER" изменить имя здесь и в FOREIGN KEY ("+ Survey_KEY_ID +") – Pavya

+0

Можете ли вы изменить код, пожалуйста? – Niroj

2

вы картирование же столбец таблицы в иностранной key.try это сейчас.

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, можете ли вы объяснить, что это? это не инициализировано? – Niroj

+0

вам нужно hav e столбец, который хранит идентификатор супер таблицы, поэтому вам нужно создать столбец для хранения them.i отредактировал код для вашей ошибки, ** не инициализирован **. –

 Смежные вопросы

  • Нет связанных вопросов^_^