Auslesen der autoincrement-column funktioniert nicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Auslesen der autoincrement-column funktioniert nicht

    Hallo Leute,

    ich habe in meiner SQLITE-Datenbank eine Tabelle mit einer AUTOINCREMENT-Spalte (INTEGER PRIMARY KEY AUTOINCREMENT -> ID)

    Wenn ich Datensätze in die Tabelle einfüge kommt es sehr sporadisch vor, dass die insert-Funktion nicht die AUTOINCREMENT-ID sondern eine hohe negative Zahl zurück gibt: z. B. -14073748835558

    Java-Quellcode

    1. long insertId = database.insert(ZahlungTableHelper.TABLE_NAME, null, values);
    Das Query schlägt nicht fehlt, es kommt keine Exception, der Datensatz wird auch in die Datenbank eingefügt (mit positiver und korrekter ID). Woran könnte es liegen, das SQLLITE anstatt der richtigen ID eine negative (siehe oben) zurück gibt? Verwendet wird Android 2.3.4 (Kundenvorgabe).


    Viele Grüße


    hs1
  • Das ist eigentlich nicht möglich, denn die Indizes die noch auf der Tabelle liegen sind alle nicht eindeutig/unique. Wenn das insert fehlschlägt müsste die Methode laut Doku -1 zurückliefern (the row ID of the newly inserted row, or -1 if an error occurred), tut sie aber nicht. Das Einfügen funktioniert auch. Sehr seltsames verhalten.
  • jogimuc schrieb:

    Hast du die ID auch mit unterstrich definiert "_id" ?
    Die Id überbietet du nicht zufällig mit im values Objekt, wenn ja das darfst du nicht.
    Ja, die id ist mit Unterstrich definiert und wird nicht manuell gesetzt.


    Java-Quellcode

    1. public static final String COLUMN_ID = "_id";
    2. public static final String COLUMN_KONTO = "konto";
    3. public static final String COLUMN_VORGANG_KEY = "vorgang_key";
    4. public static final String COLUMN_BUCHUNG_ID = "buchung_id";
    5. public static final String COLUMN_UMSATZ_KEY = "umsatz_key";
    6. public static final String COLUMN_UMSATZNUMMER = "umsatznummer";
    7. public static final String COLUMN_UMSATZ = "umsatz";
    8. public static final String COLUMN_ANGELEGT_VON = "angelegt_von";
    9. public static final String COLUMN_ANGELEGT_AM = "angelegt_am";
    10. public static final String COLUMN_GLOBAL_UNIQUE_ID_UMSATZ = "global_unique_id_umsatz";
    11. public static final String SQL_CREATE_TABLE =
    12. "CREATE TABLE "
    13. + TABLE_NAME + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , "
    14. + COLUMN_KONTO + " TEXT, "
    15. + COLUMN_VORGANG_KEY + " INTEGER, "
    16. + COLUMN_BUCHUNG_ID + " INTEGER, "
    17. + COLUMN_UMSATZ_KEY + " INTEGER, "
    18. + COLUMN_UMSATZNUMMER + " TEXT, "
    19. + COLUMN_ZAHLUNGSART + " TEXT, "
    20. + COLUMN_UMSATZ + " REAL, "
    21. + COLUMN_ANGELEGT_VON + " INTEGER, "
    22. + COLUMN_ANGELEGT_AM + " INTEGER, "
    23. + COLUMN_GLOBAL_UNIQUE_ID_UMSATZ + " TEXT "
    24. + ");";
    25. public static final String SQL_CREATE_INDICES =
    26. "CREATE INDEX IF NOT EXISTS idx1buchung_zahlungen ON buchung_zahlungen (" + COLUMN_KONTO + "," + COLUMN_BUCHUNG_ID + ");" +
    27. "CREATE INDEX IF NOT EXISTS idx2buchung_zahlungen ON buchung_zahlungen (" + COLUMN_UMSATZ_KEY + "," + COLUMN_KONTO + ");" +
    28. }
    29. public ContentValues getContentValues(ZahlungModel pZahlung){
    30. ContentValues retVal = new ContentValues();
    31. retVal.put(ZahlungTableHelper.COLUMN_KONTO, pZahlung.getKonto());
    32. retVal.put(ZahlungTableHelper.COLUMN_UMSATZ_KEY, pZahlung.getUmsatzKey());
    33. retVal.put(ZahlungTableHelper.COLUMN_UMSATZ, pZahlung.getZahlungsbetrag());
    34. retVal.put(ZahlungTableHelper.COLUMN_VORGANG_KEY, pZahlung.getVorgangKey());
    35. retVal.put(ZahlungTableHelper.COLUMN_BUCHUNG_ID, pZahlung.getBuchungId());
    36. retVal.put(ZahlungTableHelper.COLUMN_UMSATZNUMMER, pZahlung.getUmatzNummer());
    37. retVal.put(ZahlungTableHelper.COLUMN_ANGELEGT_AM, Converter.persistDate(pZahlung.getAngelegtAm()));
    38. retVal.put(ZahlungTableHelper.COLUMN_ANGELEGT_VON, pZahlung.getAngelegtVon());
    39. retVal.put(ZahlungTableHelper.COLUMN_GLOBAL_UNIQUE_ID_UMSATZ , pZahlung.getGlobalUniqueIdUmsatz());
    40. return retVal;
    41. }
    Alles anzeigen
  • Habe da im Moment keine Idee was das sein könnte. Ein Fehlverhalten ist ja nicht zu erkennen.
    Ein Fehler wäre ja bei -1 wie du sagst. Ehrlich gesagt habe ich das nie getestet was da zurück gegeben wird teste auf -1 und mache weiter. Muss ich mir bei meiner Datenbank mal anschauen.
    Im Moment weiß ich auch nicht weiter.

    Ps würde es der alten Android Version in die Schuhe schieben. Da wird wohl ein Bug drin sein. Arbeiten tut die SQL ansonsten richtig. Habe leider erst jetzt gesehen das du unter so einer alten Version arbeitest oder musst. Wenn du die id sicher brauchst nach dem Import kannst du nur nochmal eine Abfrage machen.
    Teste das Programm mal unter einer neueren Android Version ob es da auch so ist.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()