SQLite Probleme!

  • 10 Antworten
  • Letztes Antwortdatum
K

kr0llx

Neues Mitglied
0
Hey leute ich hab ein bischen mit SQLite rumgespielt und läuft auch alles soweit.
Nur wird mir warum auch immer nur die ID von meinen Gespeicherten Objekten ausgegeben wenn ich sie zum bearbeiten in die Felder zurück schreibe. Ich weiß nicht woran es liegt ich habe alles überprüft ob ich es falsch speichere oder falsch zurück lade mir ist kein Fehler aufgefallen. Hatte jemand von euch schon mal ein ähnliches Problem?

DatenbankAufbau
Code:
String createDB = "CREATE TABLE " + FISH_TABLE + " (" + FISH_ID
                + " INTEGER PRIMARY KEY, " + FISH_NAME + " TEXT," + FISH_LNAME
                + " TEXT," + FISH_ORIGIN + " TEXT," + FISH_TYP + " INTEGER,"
                + FISH_DATEOFPURCHASE + " INTEGER," + FISH_COUNT + " INTEGER,"
                + FISH_PRICE + " INTEGER," + FISH_SHOP + " TEXT)";
        db.execSQL(createDB);


Funktion zum Speichern der Fish Objektes
Code:
public Fish addNewFish(Fish fish) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(FISH_NAME, fish.getName());
        values.put(FISH_LNAME, fish.getLatName());
        values.put(FISH_ORIGIN, fish.getOrigin());
        values.put(FISH_DATEOFPURCHASE, fish.getDateOfPurchase());
        values.put(FISH_COUNT, fish.getCount());
        values.put(FISH_PRICE, fish.getPrice());
        values.put(FISH_SHOP, fish.getShop());

        long id = db.insert(FISH_TABLE, null, values);
        fish.setId(id);
        this.close();
        return fish;
    }

Schon mal vielen dank im voraus
 
Deine Methode um einen neuen Fisch hinzuzufügen liefert dir gleichzeitig das Fishobjekt mitsamt der in der Datenbank gespeicherten ID zurück.

Wo ist jetzt das Problem?

Wie greifst du auf den Fisch/die Fische zu? Was möchtest du erreichen ...
 
Code um ein bestimmtes objeckt anhhand seiner ID aus dem speucher zu holen.
Code:
    public Fish getFishById(long id) {
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor curr = db.query(FISH_TABLE, null, FISH_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null);
        curr.moveToFirst();
        
        Fish fish = new Fish();
        fish.setName(curr.getString(NAME_INDEX));
        fish.setLatName(curr.getString(LNAME_INDEX));
        fish.setOrigin(curr.getString(ORIGIN_INDEX));
        fish.setDateOfPurchase(curr.getString(DATEOFPURCHASE_INDEX));
        fish.setCount(curr.getInt(COUNT_INDEX));
        fish.setPrice(curr.getInt(PRICE_INDEX));
        fish.setShop(curr.getString(SHOP_INDEX));
        fish.setId(curr.getLong(ID_INDEX));

        curr.close();
        this.close();
        return fish;
    }
dieses Objekt wird dann mit der methode setFish in mein layout übertragen damit ich es bearbeiten kann und danach wieder abspeichern.

Code:
    public void setFish(Fish fish) {

        this.currentFish = fish;
        name.setText(fish.getName());
        latName.setText(fish.getLatName());
        origin.setText(fish.getOrigin());
        shop.setText(fish.getShop());

    }
Jedoch kommen nicht die daten an die ich eingebe sonder nur die ID in allen fäldern.


Das gebe ich ein und speichere es
odg2zbna.png


Das kommt raus wenn ich es wieder aufrufe

9cpu9c44_png.htm
 
Worin besteht der Unterschied zwischen ID_INDEX und FISH_ID?
 
9cpu9c44.png


Der ursprüngliche Beitrag von 18:21 Uhr wurde um 18:25 Uhr ergänzt:

So wie ich mir das angelesen hab brauche ich doch zum anlegen der Datenbank Namen für die Tabellen Einträge

Code:
public final static String FISH_ID = "_id";
    public final static String FISH_NAME = "name";
    public final static String FISH_LNAME = "lname";
    ....

und wenn ich doch etwas aus der Tabelle lesen will mus ich es doch mit der ColumNuber machen.
deswegen habe ich mir in der OnCreate auch die Columnumbers gespeichert.

Code:
        Cursor curr = db.query(FISH_TABLE, null, null, null, null, null, null);
        ID_INDEX = curr.getColumnIndex(FISH_ID);
        NAME_INDEX = curr.getColumnIndex(FISH_NAME);
        LNAME_INDEX = curr.getColumnIndex(FISH_LNAME);
        ORIGIN_INDEX = curr.getColumnIndex(FISH_ORIGIN);
        TYP_INDEX = curr.getColumnIndex(FISH_TYP);


Der ursprüngliche Beitrag von 18:25 Uhr wurde um 19:03 Uhr ergänzt:

Also ich hab mir mal die DataBase angeschaut. in der App wurde mir angezeigt das ich einen eintrag drin habe, was auch richtig ist. nur sieht es so aus als würde da nichts reingespeichert werden weil sie ist leer. obwohl sie das bild von oben anzeigt.
zo9ol9cb.png
 
Update:
habe es jetzt hinbekommen das die richtigen werte in der DB stehen also beim eintragen in die DB kann der Fehler nicht mehr sein höchstens noch beim Auslesen aus der DB oder beim Eintragen in die TextViews.
 
So wie ich das jetzt sehe Fragst du ja auch gar nix aus deiner Tabelle ab. Du übergibst in dem query als zweiten Wert null. Dort sollte aber doch eigentlich ein String[] mit den columns stehen die du abfragen willst.

Gruß
derjens
 
Aber ich will doch alle abfragen und keine bestimmten deswegen null;
 
derjens schrieb:
Du übergibst in dem query als zweiten Wert null.

Wenn null übergeben wird, dann wird alles abgerufen.
 
Ok. Wusste ich nicht.
 
Hatte was mit denen zu tun.
Code:
ID_INDEX = curr.getColumnIndex(FISH_ID);         NAME_INDEX = curr.getColumnIndex(FISH_NAME);         LNAME_INDEX = curr.getColumnIndex(FISH_LNAME);         ORIGIN_INDEX = curr.getColumnIndex(FISH_ORIGIN);         TYP_INDEX = curr.getColumnIndex(FISH_TYP);

Habe sie wohl erst benutzt bevor die Funktion die sie initialisert aufgerufen wurde. :razz:

Danke trotzdem an alle.
 
Zurück
Oben Unten