1. Garnet, 05.07.2012 #1
    Garnet

    Garnet Threadstarter Android-Hilfe.de Mitglied

    Hi,
    ich kenn mich mit sqlite Datenbanken leider nicht so gut aus und hoffe, dass mir hier einer weiterhelfen kann.

    Ich habe folgende Tabellen:
    Tabelle Sprecher: SprecherID, Sprechername..
    Tabelle Vortrag: VortragID, Vortragtitel, Tag...
    Tabelle Sprecherzuordnung: SprecherID, VortragID

    Meine erste Abfrage ist:
    "SELECT Sprecher_ID "+"FROM Sprecherzuordnung "+"WHERE Vortrag_ID = ? "

    Jetzt würde ich gerne eine Abfrage machen, die nur die Sprechernamen auswählt, bei denen der Vortrag am Montag stattfindet. also WHERE Tag = Montag ist.
     
  2. swordi, 05.07.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    das ginge zb so:

    select sprecher_id from sprecherzuordnung, vortrag where sprecherzuordnung.vortragID = vortrag.vortrag_id AND tag = montag
     
    Garnet bedankt sich.
  3. Garnet, 05.07.2012 #3
    Garnet

    Garnet Threadstarter Android-Hilfe.de Mitglied

    Vielen Dank!
    Jetzt bekomme ich nur eine blöde Exception: "bind or column index out of range". :-(
    Die Abfrage:
    cur2 = StartseiteActivity.​
    appDB2.rawQuery("SELECT Sprecher_ID "+"FROM Sprecherzuordnung, Vortrag "+"WHERE Sprecherzuordnung.Vortrag_ID = Vortrag.Vortrag_ID AND Tag = 'Montag'",

    new String[] {sprecherID});

    Müsste ich da jetzt nicht noch den Sprechernamen einbauen, der ist bei der Abfrage ja gar nicht drin?
     
  4. Tom299, 06.07.2012 #4
    Tom299

    Tom299 Android-Experte

    Code:
    select Sprechername from Sprecher as sp, Vortrag as v, Sprecherzuordnung as z 
    where Tag = 'Montag' 
    and v.VortragID = z.VortragID
    and sp.SprecherID = z.SprecherID
    
    das müßte gehen
     
  5. Garnet, 06.07.2012 #5
    Garnet

    Garnet Threadstarter Android-Hilfe.de Mitglied

    Danek Tom, nur leider bekomm ich da schon wieder die Exception "bind or column index out of range". :-(
     
  6. Thyrion, 06.07.2012 #6
    Thyrion

    Thyrion Ehrenmitglied

    Du übergibst dem rawQuery() einen Parameter (new String[] ...) aber es gibt keinen Platzhalter im SQL-Query, wo dieser eingesetzt werden kann/soll.
     
  7. Tom299, 06.07.2012 #7
    Tom299

    Tom299 Android-Experte

    Ohne Code kann man schlecht was sagen ... setz den Befehl mal in deinem SQL-Manager ab, wenn das funktioniert liegts am Code ;-)

    Hast du auch cursor.moveToFirst() gemacht?
     
  8. Garnet, 06.07.2012 #8
    Garnet

    Garnet Threadstarter Android-Hilfe.de Mitglied

    Also wenn ich die Abfrage in meinem SQL-Manager ausführen will, stürzt er ab.^^'''

    cursor.moveToFirst() hab ich gemacht.

    Hier ist mal mein Code von Anfang an:

    Code:
    [LEFT][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//[U]Befüllen[/U] [U]der[/U] ListView myListing[/COLOR][/SIZE]
    [/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]for[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] i=1; i<=anzahl; i++) [/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2][U]HashMap[/U] item = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] [U]HashMap[/U]();[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] spaltenindex = 0;[/SIZE]
    [SIZE=2]String vortragstitel=[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]""[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
    [SIZE=2]String uhrzeit=[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]""[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
    [SIZE=2]String s = Integer.[I]toString[/I](i);[/SIZE]
    [SIZE=2]cur = StartseiteActivity.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]appDB2[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].rawQuery([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"SELECT Vortragstitel "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"FROM Vortrag "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"WHERE Vortrag_ID = ? AND Tag = 'Montag'"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] String[] {s});[/SIZE][/LEFT]
     
    [LEFT][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//[U]Spalte[/U] [U]Vortragstitel[/U] [U]aus[/U] [U]dem[/U] [U]Abfrageergebnis[/U] [U]wird[/U] [U]ausgewählt[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#3f7f5f][/LEFT]
    
    [/COLOR][/SIZE][SIZE=2]spaltenindex = cur.getColumnIndex(
    [/SIZE][LEFT][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Vortragstitel"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2](cur.getCount() > 0)[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2]cur.moveToFirst();[/SIZE]
    [SIZE=2]vortragstitel = cur.getString(spaltenindex); [/SIZE]
    [SIZE=2][U]item.put([/U][/SIZE][U][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"line1"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], vortragstitel )[/SIZE][/U][SIZE=2];[/SIZE]
    [SIZE=2]}[/SIZE][/LEFT]
     
     
    [LEFT][SIZE=2]String sprecherID =[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]""[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE]
    [SIZE=2]String sprechername =[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]""[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];[/SIZE][/LEFT]
     
    [LEFT][SIZE=2]cur = StartseiteActivity.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]appDB2[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].rawQuery([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"SELECT Sprecher_ID "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"FROM Sprecherzuordnung "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"WHERE Vortrag_ID = ? "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] String[] {s});[/SIZE][/LEFT]
     
    [LEFT][SIZE=2]spaltenindex = cur.getColumnIndex([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Sprecher_ID"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE][/LEFT]
     
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]if[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2](cur.getCount() > 0)[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2]cur.moveToFirst();[/SIZE]
    [SIZE=2]sprecherID = cur.getString(spaltenindex); [/SIZE][/LEFT]
     
    [LEFT][SIZE=2]Cursor cur2;[/SIZE]
    [SIZE=2]cur2 = StartseiteActivity.[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]appDB2[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2].rawQuery([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"SELECT Sprechername "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"FROM Sprecher AS sp, Vortrag AS v, Sprecherzuordnung AS z "[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+[/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"WHERE Tag = 'Montag' AND v.Vortrag_ID = z.Vortrag_ID AND sp.Sprecher_ID = z.Sprecher_ID"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], [/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] String[] {sprecherID});[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] spaltenindex2 = 0;[/SIZE]
    [SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//[U]Spalte[/U] [U]Sprechername[/U] [U]aus[/U] [U]dem[/U] [U]Abfrageergebnis[/U] [U]wird[/U] [U]ausgewählt[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#3f7f5f]
    [/COLOR][/SIZE][SIZE=2]spaltenindex2 = cur2.getColumnIndex([/LEFT]
    [/LEFT]
    [/SIZE][LEFT][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Sprechername"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [LEFT][SIZE=2]cur2.moveToFirst();[/SIZE]
    [SIZE=2]sprechername = cur2.getString(spaltenindex2);[/SIZE][/LEFT]
    [SIZE=2][U]item.put([/U][/SIZE][U][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"line2"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2], sprechername )[/SIZE][/U][SIZE=2];[/SIZE]
    
    Die ersten beiden Abfragen funktionieren, nur eben diese nicht. :-(

    [/LEFT]
     
  9. Thyrion, 06.07.2012 #9
    Thyrion

    Thyrion Ehrenmitglied

    s.o.
     
    Garnet bedankt sich.
  10. Garnet, 06.07.2012 #10
    Garnet

    Garnet Threadstarter Android-Hilfe.de Mitglied

    Ok, jetzt hab ichs gesehen, danke Thyrion. Aber was muss jetzt in das new String[] {...} genau rein? Steh da grade irgendwie auf dem Schlauch.
     
  11. Thyrion, 06.07.2012 #11
    Thyrion

    Thyrion Ehrenmitglied

    Wenn du keinen Parameter in dem SQL brauchst, versuch es doch mal mit null.

    EDIT: rawQuery("SELECT ... bla", null);

    EDIT 2: Ich vermute aber, du möchtest das ganze auf einen bestimmten Sprecher (nämlich den, den du vorher selektierst) einschränken und nicht die gesamte Tabelle zurückgeben. Demnach musst du das Select-Statement noch um die Bedingung erweitern. Damit dürfte das so aussehen:
    PHP:
    cur2 StartseiteActivity.appDB2.rawQuery("SELECT Sprechername FROM Sprecher AS sp, Vortrag AS v, Sprecherzuordnung AS z WHERE Tag = 'Montag' AND v.Vortrag_ID = z.Vortrag_ID AND sp.Sprecher_ID = z.Sprecher_ID AND z.Sprecher_ID = ?", new String[] {sprecherID});

    EDIT 3: Wieso eigentlich nicht alles in einem SELECT? (Das dürfte deutlich performanter sein)
     
    Zuletzt bearbeitet: 06.07.2012
  12. Garnet, 06.07.2012 #12
    Garnet

    Garnet Threadstarter Android-Hilfe.de Mitglied

    Also mit null klappt es leider auch nicht. Da zeigt er mir in der ganzen Liste den gleichen Sprechernamen an.
    Also ich will eigentlich nur, dass meine Liste mit den Sprechern befüllt wird, die an dem Tag Montag z.B. einen Vortrag halten. Es sollen dann in der Liste immer Vortagstitel und der dazugehörige Sprechername angezeigt werden.

    Gern auch alles in einem Select, wie gesagt, tu ich mich noch etwas schwer mit dem ganzen Datenbankkram.
     
  13. Thyrion, 06.07.2012 #13
    Thyrion

    Thyrion Ehrenmitglied

    Na dann mach doch genau das :smile:

    PHP:
    SELECT v.Vortragstitels.Sprechername
    FROM Vortrag v
    Sprecher sSprecherzuordnung sz 
    WHERE
        s
    .SprecherID sz.SprecherID
        
    AND v.VortragID sz.VortragID
        
    AND v.Tag = ?
    Und "Montag" dann als Parameter übergeben.

    EDIT: Das hat aber Tom299 im Prinzip auch schon geschrieben :lol:
     
  14. Garnet, 06.07.2012 #14
    Garnet

    Garnet Threadstarter Android-Hilfe.de Mitglied

    Ok, also ich stell mich wahrscheinlich grade ziemlich doof an.

    Ich hab es jetzt nochmal mit deiner Abfrage versucht, da ist aber wieder das Problem, dass er mir immer den gleichen Sprecher anzeigt bei jedem Listeneintrag.
     

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. datenbank werte aus unterschiedlichen Tabellen holen