2017-02-21 2 views
0

Ich erhalte einen Fehler mit dieser Aussage:Es gibt einen Fremdschlüssel-Syntax-Fehler

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

FATAL AUSNAHME: Haupt Prozess: com.example.user.apple, PID: 3547 android.database.sqlite.SQLiteException: in der Nähe von "Tcid": Syntaxfehler (Code 1):, beim Kompilieren: CREATE TABLE trip (INTEGER PRIMARY KEY, from_trip TEXT, to_trip TEXT, sate_cost INTEGER, Aufnahme TEXT, Datum INTEGER, Zeit INTEGER, tmid INTEGER, FREMDSCHLÜSSEL (tmid) REFERENZEN member (KEY_MID), tcid INTEGER, FREMDSCHLÜSSEL (ccid) REFERENZEN carinfo (KEY_CID)), sets INTEGER);

+0

Sie habe eine zusätzliche schließende Klammer nach dem ... 'REFERENZEN carinfo (KEY_CID)' –

Antwort

0

FK-Integritätsbedingungen nicht mit Spaltenbedingungen verschachteln; entweder die in-line-Version:

mycolumn int references othertable 

oder expliziten Einschränkungen nach alle Spalten:

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

Es ist optional die Spalte der referenzierten Tabelle zu erwähnen, wenn die referenzierte Spalte das ist Primärschlüssel (den Sie sowieso definieren sollten).

So ändern:

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

, die eine andere Syntaxfehler mit nicht übereinstimmen Klammern hat, zu:

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

Fremdschlüsselwert ist null oder nicht, den Wert von Elternteil table.please wieder aufrufend – Thinker

+0

@thinker, was meinst du? Ist das eine Fehlermeldung? Möchten Sie Nullen in FK-Spalten einfügen? Klingt wie eine andere Frage, die nicht mit dieser Frage zusammenhängt, also solltest du wahrscheinlich eine neue Frage stellen. – Bohemian

+0

in meiner obigen Trip-Tabelle die beiden Fremdschlüssel sollten den Wert aus meiner zwei Elterntabelle. Die zwei Elterntabelle als Werte aber Fremdschlüsselwert ist leer oder null. Was soll ich tun, um den Wert zu erhalten? – 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

bitte helfe mit was für die Änderungen nötig sind das oben genannte, um Primärschlüssel anderer Tabelle zu erhalten. – Thinker

0

// dies in datahelper Klasse // Cursor zur getId eine andere Tabelle

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

das bekommt Wert von Elterntabelle, aber Hinzufügen zu vorhergehenden Zeilen – Thinker

+0

bitte helfen, wenn es nicht richtig ist – Thinker