Zugriff auf FOREIGN KEY Spalten mit Cursor

  • Benötigt man spezielle Befehle wenn man mit einem Cursor auf die Spalte mit den FOREIGN KEYS zu greifen möchte?



    Wenn ich auf die Spalte mit dem FOREIGN KEY zugreifen möchte mit cursor.getLong(nummerDerKeySpalte) bekomme ich Exception "java.lang.IllegalStateException: Couldn't read row 0, col 5 from CursorWindow.......



    Irgendwie scheint die Spalte gar nicht sichtbar zu sein. Ich kann zur Laufzeit mit keinem gängigen Befehl wie Cursor.getXXX(nummerDerKeySpalte) zu greifen. Ebenfalls wird sie bei Cursor.getColumnCount() nicht mitgezählt.



    Ich hab die Datenbank aus dem Emulator rausgezogen und im "DB Browser for SQLite" angeschaut. Spalten sind alle vorhanden und auch die jeweiligen id Einträge der FOREIGN KEY Spalten stimmen. Also die Datenbank scheint korrekt abgespeichert zu sein nur zugreifen darauf kann ich nicht.



    Ich hab die Spalte auch explizit im OnCreate String als Foreign Key Spalte deklariert mit "FOREIGN KEY(KeySpalte) REFERENCES AndereTabelle(idSpalteDieReferenziertWird)".


    Ebenfalls habe ich mittelerweile in onOpen()
    db.execSQL("PRAGMA foreign_keys = ON;");


    und in OnConfigure
    db.setForeignKeyConstraintsEnabled(true);


    eingefügt aber an dem schien es auch nicht zu liegen.


    Mach ich was grundsätzliches falsch beim Zugriff auf diese Spalten oder sollte der Zugriff gleich verlaufen wie auf andere Spalten?
    Brauch ich spezielle Cursor oder muss ich die Datenbank speziell konfigurieren, dass ich darauf zugreifen kann?


    Wäre echt froh wenn mir jemand helfen könnte. Habe schon Stunden mit Googeln und testen verbracht aber irgendwie find ich nichts brauchbares dazu.

  • Erstellen der Datenbank die den Foreign Key beinhaltet


    Erstellen der Datenbank auf dessen ID referenziert wird


    Zugriff im bindView eines ItemAdapters der von CursorAdapter erbt mit welchem ich die Daten extrahiere um sich nachher in einer ListView darzustellen. Die Exception tritt bei Zeile 15 auf. Wie gesagt kann ich mit keinem einzigen getXXX() Befehl auf die Spalte zugreifen. Ich hoffe der Ausschnitt reicht. Der Rest des Codes ist meiner Meinung nach nicht relevant. Ansonsten sagt mir wenn ihr noch was braucht. Danke schon mal für die Durchsicht.

  • Ich hab das Problem gefunden und eine Lösung!


    Anscheinend ist der Cursor welcher der bindView()-Methode übergeben wird nicht in der Lage auf die Foreign-Key Spalten zu zugreifen.
    Ich habe jetzt einen zweiten internen Cursor innerhalb der Methode erzeugt, mit welchem ich durch Benutzung der selbsterstellten getIngredientNeededItem()-Methode an alle Einträge gelange.


    Wieso der Cursor dazu nicht in der Lage ist weiss ich nicht. Vielleicht kann jemand der erfahreneren Programmierer unter euch genauer erklären wieso das so ist. Würde mich noch interessieren.





Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!