2017-05-09 4 views
0

Ich versuche, zwei Tabellen gleichzeitig in Android hinzuzufügen. Ich versuche wie 2 Stunden, es zu tun, aber ich bin jetzt verloren. Ich habe 2 Tische wie gesagt. Sie sind Körper- und Personentabellen. Person Tabelle funktioniert gut, aber Körper nicht. Der Körper hat einen Fremdschlüssel, der auf die PK der Person verweist. DieseSqlite Insert Zwei Tabelle - Android

ist, wo im verloren.

public class DatabaseHandler extends SQLiteOpenHelper { 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "healthMonitor.db"; 

// Contacts table name 
private static final String TABLE_NAME = "Person"; 
private static final String TABLE_NAME2 = "Body"; 
// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String BODY_KEY_ID = "bId"; 
private static final String FOREIGN_KEY_ID = "personId"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_ARM = "arm"; 
private static final String KEY_BRAIN = "brain"; 
private static final String KEY_EYE = "eye"; 
private static final String KEY_HEART = "heart"; 
private static final String KEY_LEG = "leg"; 
private static final String KEY_SURNAME = "surname"; 
private static final String KEY_AGE = "age"; 
private static final String KEY_EYECOLOR = "eyeColor"; 

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

public boolean isExternalStorageWritable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     return true; 
    } 
    return false; 
} 

private String createFirstTable(){ 
    String query = "CREATE TABLE " + TABLE_NAME + " (" + 
      KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_NAME + " TEXT, " + 
      KEY_SURNAME + " TEXT, "+ 
      KEY_AGE + " INTEGER, " + 
      KEY_EYECOLOR + " TEXT);"; 

    return query; 
} 

private String createSecondTable(){ 
    String query = "CREATE TABLE " + TABLE_NAME2 + " (" + 
      BODY_KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
      KEY_ARM + " INTEGER, " + 
      KEY_BRAIN + " INTEGER, "+ 
      KEY_EYE + " INTEGER, " + 
      KEY_HEART + " INTEGER, "+ 
      KEY_LEG +" INTEGER, " + 
      FOREIGN_KEY_ID + " INTEGER, "+ 
      FOREIGN_KEY_ID + " FOREIGN KEY REFERENCES "+TABLE_NAME+ "("+KEY_ID+");"; 

    return query; 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(createFirstTable()); 
    db.execSQL(createSecondTable()); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + "," + TABLE_NAME2); 
    // Create tables again 
    onCreate(db); 
} 

boolean addContact(MainActivity.Person person) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, person.getName()); // Person Name 
    values.put(KEY_SURNAME, person.getSurname()); // Person Surname 
    values.put(KEY_AGE, person.getAge()); // Person Age 
    values.put(KEY_EYECOLOR, person.getEyeColor()); // Person Surname 

    // Inserting Row 
    db.insert(TABLE_NAME, null, values); 
    //db.close(); // Closing database connection 
    return true; 
} 

boolean addBody() { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_ARM, 5); // Person Name 
    values.put(KEY_BRAIN, 4); // Person Surname 
    values.put(KEY_EYE, 3); // Person Age 
    values.put(KEY_HEART, 2); // Person Surname 
    values.put(KEY_LEG, 1); // Person Age 
    values.put(FOREIGN_KEY_ID, 1); // Person Surname 

    // Inserting Row 
    db.insert(TABLE_NAME2, null, values); 
    //db.close(); // Closing database connection 
    return true; 
} 

Bitte überprüfen onCreate() Funktion. Ich bin wirklich verloren. Dank

"FOREIGN KEY (" + FOREIGN_KEY_ID + ") REFERENCES "+ + TABLE_NAME "(" + KEY_ID +")";

Und

FOREIGN_KEY_ID + "INTEGER Informationsquellen "+ TABLE_NAME + "(" + KEY_ID +");"

Dieser ist nicht funktioniert entweder

richtige

FOREIGN_KEY_ID + "INTEGER REFERENCES "+ TABLE_NAME + "(" + KEY_ID +"));";

+0

Ihr alle SQL-Befehl als Zeichenfolge Dump, und Sie werden verstehen, wo Problem. – RRTW

Antwort

0

verpassten Sie die schließende Klammer in Ihrem zweiten Abfrage

Code: FOREIGN_KEY_ID + " FOREIGN KEY REFERENCES "+TABLE_NAME+ "("+KEY_ID+");";

aktualisiert: FOREIGN_KEY_ID + " FOREIGN KEY REFERENCES "+TABLE_NAME+ "("+KEY_ID+"));";

+0

Ja, wie ich gestern sagte, das löste mein Problem. Danke – Berkin

+0

Überprüfen Sie immer nur Ihre Anfrage, es ist sehr empfindlich. Viel Glück –