1. Gewinne jetzt ein UMiDIGI C Note - alle Informationen findest du hier!!
  1. androidler1, 19.02.2012 #1
    androidler1

    androidler1 Threadstarter Android-Experte

    Hallo,

    ich habe gegoogelt aber leider nichts passendes gefunden.

    Ich habe zum Beispiel 2 Tabellen angelegt. Mit folgenden Namen und Inhalt als Beispiel.
    Tabelle: Klasse
    ID---------Klasse
    5----------Umsatzerlöse

    Tabelle: Konto
    KtoNr--------Bezeichnung---------Klasse(Fremdschlüssel von oben)
    50-----------Handelswaren-----------5

    So sehen die Queries zum Anlegen der Tabellen aus:
    Code:
    private static final String CREATE_KLASSE = "Create table if not exists "
    			+ MY_DB_TABLE_KLASSE + " ( id integer primary key, "
    			+ "klasse varchar(50) );";
    
    private static final String CREATE_KONTO = "Create table if not exists "
    			+ MY_DB_TABLE_KTO + " ( KtoNr integer primary key, "
    			+ "bezeichnung varchar(100), " + 
    			"Klasse references " + MY_DB_TABLE_KLASSE + "(id) );";
    
    Zum Einfügen in die Tabelle Konto gehe ich so vor:
    Code:
    ContentValues values = new ContentValues();
    		
    		try{
    			values.put("ktonr", "50");
    			values.put("bezeichnung", "Handelswaren");
    			values.put("klasse", [COLOR="Red"][B]5[/B][/COLOR]);
    			myDB.insert(MY_DB_TABLE_KTO, null, values);
    		}catch(SQLException e){
    			System.out.println("FEHLER INSERT KONTO");
    		}
    Was mir hier schon beim Einfügen auffällt, dass wenn ich anstatt der roten 5 (oben im Code) eine 10 eingebe, dann bekomm ich keine Fehlermeldung zurück, da es ja keinen Datensatz in der Tabelle Klassen mit dem Primärschlüssel 10 gibt. Warum wird hier nicht überprüft ob es einen Datensatz mit der 10 in Klasse gibt??

    Nun ja, das eigentliche Problem ich lese jetzt die Daten aus der Tabelle Konto aus und bekommen folgende ausgabe mit dem Code hier:
    Code:
    Cursor c = myDB.query(MY_DB_TABLE_KTO, null, null, null, null, null, null);
    		c.moveToFirst();
    		t.setText("");
    		while(c.isAfterLast()==false){
    			t.append("\n" + c.getString(0)+ " | "+c.getString(1) + " | " + c.getString(2));
    			c.moveToNext();
    		}
    		c.close();
    Ausgabe: 50 | Handelswaren | 5
    Ich möchte aber anstatt der grünen 5 hier Umsatzerlöse stehen haben.
    D.h. ich muss ja einen Join(where) machen, aber wie mache ich das ohne die komplette Query selber zu schreiben.
     
  2. Sentence, 20.02.2012 #2
    Sentence

    Sentence Erfahrener Benutzer

    Moin,
    schau dir mal dies an SQLite Foreign Key Support
    Du musst mit Foreign Keys arbeiten.

    Diese musste du meines wissens nach in SQLite bei Android explizit einschalten.
    In deiner SQLiteOpenHelper zb so
    @Override
    public void onOpen(SQLiteDatabase db) {
    super.onOpen(db);
    if (!db.isReadOnly()) {
    // Enable foreign key constraints
    db.execSQL("PRAGMA foreign_keys=ON;");
    }
    }

    Für die Joins kannst du entweder die rawQuery nehmen, oder dir den Query mit dem SQLiteQueryBuilder SQLiteQueryBuilder | Android Developers zusammenbauen.

    MfG
     
    androidler1 gefällt das.
  3. androidler1, 20.02.2012 #3
    androidler1

    androidler1 Threadstarter Android-Experte

    Danke für deine Antwort, werde es mal so versuchen. Bei Fragen meld ich mich nochmals :)
    Dachte schon, dass hier niemenad sowas mit der DB macht.
     
  4. androidler1, 22.02.2012 #4
    androidler1

    androidler1 Threadstarter Android-Experte

    Hat geholfen :) dein Link und vor allem war diese Zeile wichtig:

    db.execSQL("PRAGMA foreign_keys=ON;");
     
  5. JanF, 22.02.2012 #5
    JanF

    JanF Android-Experte

    Mache sowas zwar auch, aber ich habe nicht viel mit Datenbanken gearbeitet und lasse jetzt ORM-LITE die Arbeit für mich erledigen.
    OrmLite - Lightweight Object Relational Mapping (ORM) Java Package
    Ich finds klasse, einfach per Annotationen einen Großteil der Datenbank Arbeit erledigen zu lassen.
     
    androidler1 gefällt das.
  6. androidler1, 22.02.2012 #6
    androidler1

    androidler1 Threadstarter Android-Experte

    Das ist super ;)
     
  7. lord_fritte, 25.03.2012 #7
    lord_fritte

    lord_fritte Fortgeschrittenes Mitglied

    Hallo, ich mache auch gerade meine ersten Versuche mit OrmLite. Aber wie macht sich so ein System im Bereich Speicherverbrauch und Performance?
     
    Zuletzt bearbeitet: 26.03.2012
Die Seite wird geladen...
Ähnliche Themen Forum Datum
SQL-Abfrage über zwei Tabellen realisieren Android App Entwicklung 12.02.2017
Kommunikation zwischen 2 Smartphones herstellen Android App Entwicklung 07.01.2017
SQLite auslesen und in Tabelle darstellen Android App Entwicklung 12.10.2016
SQLite Tabelle in app erstellen Android App Entwicklung 01.09.2016
2. Frage zur Farbanpassung Android App Entwicklung 06.07.2016
Du betrachtest das Thema "Datenbankzugriff über 2 Tabellen (Fremdschlüssel)" im Forum "Android App Entwicklung",