Datenbank speichert oder liest nicht

  • 22 Antworten
  • Letztes Antwortdatum
P

PlüschPiratin

Neues Mitglied
1
Hi

ich verzweifle langsam.
ich habe die datenbank eigentlich genau so gemacht wie ich sie sonst auch immer geschrieben habe und es hat sonst auch immer geklappt. Nur jetzt streikt sie.

datenbank
Code:
package persistence;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class TestDatabase extends SQLiteOpenHelper{
    
    private static final String DB_NAME = "test.db";
    private static final int DB_VERSION = 1;
    private static final String TABLE = "test_table";
    
    private static final String ID = "_id";
    private static final String NACHNAME = "nachname";
    private static final String VORNAME = "vorname";
    private static final String TELEFON = "telefon";
    
    private static final String TEST_CREATE = 
            "CREATE TABLE "+ TABLE +" (" +
            ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            NACHNAME + " STRING NOT NULL, " +
            VORNAME + " STRING, " +
            TELEFON + " LONG NOT NULL" +
            ")";
    
    
    private static final String TEST_DROP = 
            "DROP TABLE IF EXISTS " + TABLE;

    public TestDatabase (Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(TEST_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(TEST_DROP);
        onCreate(db);
    }
}
Insert (in der oncreate steht noch mTestDatabase = new TestDatabase(this);

Code:
...
ArrayList<ContentValues> werte = importer.importFile();
....

mDatabase = mTestDatabase.getReadableDatabase();
                        long imports; 
                        
                        for(int i = 0; i < werte.size(); i ++){
                            werte.get(i).toString();
                            imports = mDatabase.insert("test_table", null, werte.get(i));
                            
                        }
                        mDatabase.close();
                            Intent intent = new Intent(this, Ausgabe_Activity.class);
                            startActivity(intent);
Ausgabe:
Code:
mDatabase = mTestDatabase.getReadableDatabase();
        Cursor cursor = mDatabase.rawQuery("Select * From test_table", null);
        if(cursor.moveToFirst()){
            Toast.makeText(this,"joo", Toast.LENGTH_SHORT).show();
           
        }else{
            Toast.makeText(this, "nix", Toast.LENGTH_SHORT).show();
        }
es wird aber "nix" ausgegeben und wenn ich bei der Ausgabe eine Where klausel einbaue stürzt es ab mit dem fehler "get field slot from row 0 col -1 failed" also irgendwas läuft da krumm
ich hab mir beim importieren auch die ID ausgeben lassen und der insert gibt auch immer die ID zurück

was is denn da verkorkst??

Vielen dank schonmal
 
Hast du mal geschaut ob die Datenbank überhaupt angelegt wurde und ob
die Datensätze auch eingetragen wurden?
 
was datenbanken angeht bin ich noob wie genau kann ich das denn nachsehen? dachte mit dem ausgeben der rows würde ich dann sehen ob was reingeschrieben wird oder nich :S
 
Mit was für einer Umgebung arbeitest du? Eclipse ?

Gesendet von meinem HTC Sensation mit Tapatalk 2
 
Eclipse Juno ja
 
Bei Eclipse kannst du mit der DDMS Perspective die Datenbank von deinem AVD auf den Rechner ziehen und sie dir mal anschauen.

Bist du mit Linux unterwegs?
 
Nein Windows 8 ich versuch das mal mit der Perspektive
 
Falls du es nicht hin bekommst sag Bescheid.

Gesendet von meinem HTC Sensation mit Tapatalk 2
 
also ich hab jetzt hier die SD karten ordner struktur vom handy wo genau sind die datenbanken denn?
 
führst du das direkt auf dem Handy aus oder mit dem emulator?
 
Auf dem Handy
 
Hast du das direkt am Rechner angeschlossen und kannst per DDMS Perspective darauf zugreifen und Debuggen?
 
die ddms perspektive zeigt mir die sachen vom handy ja aber wir genau ich bei android debugge weiß ich nich :S mache das noch nich so lange
 
Wenn es die Daten vom Handy Anzeigt dann geh ma in der DDMS Perspective
mit dem File Explorer unter

data -> data -> "dein Paketname " -> databases -> *.db

das müsste die Datenbank sein.
 
da kriege ich nichts sieht eher so aus als wäre der ordner leer.
Astro sagt mir auch das der ordner leer wäre

Der ursprüngliche Beitrag von 17:16 Uhr wurde um 17:17 Uhr ergänzt:

Ich habe die selbe Datenbank in ein extre projekt gepackt mit nur zwei klassen zum lesen und schreiben da bleibt der cursor nicht leer und der gibt mir die sachen richtig aus.
 
Warum führst du das nicht erst mal auf dem Emulator aus?
Da kannste dann auf alle Daten zugreifen.
 
ich kriege die SD karte vom emulator nur read only ich muss aber eine datei rein tun die ich einlesen kann also mit dem push button gehts nich

Der ursprüngliche Beitrag von 17:32 Uhr wurde um 17:35 Uhr ergänzt:

ah ausserhalb von eclipse gehts mit der SD karte ;) habe jetzt die db datei
 
Mit dem Emulator hätte ich helfen können. Da ich mit Linux unterwegs bin und
ich das Handy dort eh nicht direkt mit Eclipse verbinden kann, kann ich dir leider
nicht weiter helfen. Falls du es trotzdem mal mit Emulator versuchen willst sag Bescheid.

Gruß
Jens
 
ich arbeite doch grade auf dem emulator seit dem du das gesagt hast ;) also auf dem emulator gestartet und in data/data/.../databases oder so geguckt und da is meine imports.db drin die auch jetzt grade erstellt wurde
 
Und ist was in der Datenbank drin?

Gesendet von meinem HTC Sensation mit Tapatalk 2
 
Zurück
Oben Unten