2017-02-21 8 views
0

Я получаю сообщение об ошибке с этим утверждением:Существует иностранный ключ-синтаксис ошибка

CREATE TABLE trip (
    tid INTEGER PRIMARY KEY, 
    from_trip TEXT, 
    to_trip TEXT, 
    seat_cost INTEGER, 
    pickup TEXT, 
    date INTEGER, 
    time INTEGER, 
    tmid INTEGER, 
    FOREIGN KEY (tmid) REFERENCES member(KEY_MID), 
    tcid INTEGER, 
    FOREIGN KEY (tcid) REFERENCES carinfo(KEY_CID)), 
    seats INTEGER 
); 

НЕУСТРАНИМОГО ИСКЛЮЧЕНИЕ: главный процесс: com.example.user.apple, PID: 3547 android.database.sqlite.SQLiteException: рядом с «tcid»: синтаксическая ошибка (код 1): при компиляции: CREATE TABLE trip (tid INTEGER PRIMARY KEY, from_trip ТЕКСТ, to_trip ТЕКСТ, seat_cost INTEGER, pickup TEXT, date INTEGER, время INTEGER, tmid INTEGER, FOREIGN KEY (tmid) СПИСОК ЛИТЕРАТУРЫ (KEY_MID), tcid INTEGER, FOREIGN KEY (tcid) ССЫЛКИ carinfo (KEY_CID)), места INTEGER);

+0

Вы имеют дополнительную закрывающую скобку после ... 'ССЫЛКИ carinfo (KEY_CID)' –

ответ

0

Не чередуйте ограничения FK с ограничениями столбцов; либо использовать в онлайн-версию:

mycolumn int references othertable 

или явных ограничения после всех колонка:

mycol1 int, 
mycol2 int, 
foreign key (mycol1) references othertable, 
foreign ket (mycol2) references othertable2 (somecol) 

Это не является обязательным упомянуть колонку ссылочной таблицы, если ссылки столбца является первичный ключ (который вы должны определить в любом случае).

Таким образом, изменение:

CREATE TABLE trip (
    tid INTEGER PRIMARY KEY, 
    ... 
    tmid INTEGER, 
    FOREIGN KEY (tmid) REFERENCES member(KEY_MID), 
    tcid INTEGER, 
    FOREIGN KEY (tcid) REFERENCES carinfo(KEY_CID)), 
    seats INTEGER 
); 

который имеет другую ошибку синтаксиса с несовпадающими скобки,:

CREATE TABLE trip (
    tid INTEGER PRIMARY KEY, 
    ... 
    tmid INTEGER REFERENCES member, 
    tcid INTEGER REFERENCES carinfo, 
    seats INTEGER 
); 
+0

значение внешнего ключа равно null или не переопределяет значение из родительской таблицы. help help – Thinker

+0

@thinker, что вы имеете в виду? Это сообщение об ошибке? Вы хотите вставить нули в столбцы FK? Похоже на другой вопрос, не связанный с этим вопросом, поэтому, вероятно, вы должны задать новый вопрос. – Bohemian

+0

в моей таблице отключения, два внешних ключа должны получить значение из моей родительской таблицы. Две родительские таблицы в качестве значений, но значение внешнего ключа пусто или равно null. Что я должен сделать, чтобы получить значение? – Thinker

0
public long createride(String from_trip,String to_trip,String date,String time,String pickup,String cost,String seats) { 

    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_FROM,from_trip); 
    values.put(KEY_TO,to_trip); 
    values.put(KEY_DATE,date); 
    values.put(KEY_TIME,time); 
    values.put(KEY_PICKUP,pickup); 
    values.put(KEY_SEATS,seats); 
    values.put(KEY_SEAT_COST,cost); 
    long insertId = db.insert(TABLE_TRIP, null, values); 

    return insertId; 
} 
+0

, пожалуйста, помогите с тем, какие изменения необходимы для выше, чтобы получить первичный ключ другой таблицы. – Thinker

0

// это в datahelper классе // с помощью курсора GetId из другая таблица

public Cursor getId(String tableName) 
    { 

    String query = ("insert into trip tmid select mid from member"); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor c = db.rawQuery(query,null); 
    return c; 
    } 
//this in my main activity 
//calling cursor 
      public void onClick(View v) { 
      long isInserted = myDb.createride(etfrom.getText().toString(), 
        etto.getText().toString(), 
        etdate.getText().toString(), 
        ettime.getText().toString(), 
        etpick.getText().toString(), 
        etcost.getText().toString(), 
        etseat.getText().toString()); 
      if (isInserted > 0){ 

       Cursor cursor = myDb.getId(myDb.TABLE_MEMBER); 
       startManagingCursor(cursor); 

       while(cursor.move(0)) { 
        int id = cursor.getInt(0); 
       } 
    //this is how i using to get value to table 
     public long createride(String from_trip,String to_trip,String date,String time,String pickup,String cost,String seats) { 

    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_FROM,from_trip); 
    values.put(KEY_TO,to_trip); 
    values.put(KEY_DATE,date); 
    values.put(KEY_TIME,time); 
    values.put(KEY_PICKUP,pickup); 
    values.put(KEY_SEATS,seats); 
    values.put(KEY_SEAT_COST,cost); 

    long insertId = db.insert(TABLE_TRIP, null, values); 

    return insertId; 
} 
+0

это получает значение из родительской таблицы, но добавление к предыдущим строкам – Thinker

+0

, пожалуйста, помогите, если это не правильно – Thinker

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