Anfängerfrage zu SQLite und Android

  • Antworten:6
Bor
  • Forum-Beiträge: 9

23.08.2014, 17:31:33 via Website

Hi.

Das ist gerade mein erstes Hobby-Android Projekt, bin sonst eher Web Developer. Kurze Frage:

Ich will eine App basteln, die direkt am Anfang eine gut gefüllte Datenbank hat, und dann verwendet wird um diverse Daten des Users zu speichern. Wie ist da die normale Vorgehensweise in dem Fall?

Ich habe per SqliteBrowser eine Test-Datenbank mit ein paar Datensätzen gebastelt, nur um zu sehen wie das geht. Diese habe ich dann in das assets Verzeichnis meiner App kopiert (ich verwende Eclipse).

Ich habe mir auch ein paar allgemeine Tutorials zu dem Thema durchgelesen, die jeweils eine Datenbank und diverse Tabellen neu anlege. Aber wie das nun konkret funktioniert, mit meiner schon bestehenden Datenbank...

Auf Stackoverflow hat jemand ein paar Zeilen Code gepostet, bei denen wohl die Datenbank aus dem assets Verzeichnis herauskopiert wird, damit sie verwendet werden muss. Ist das der Standard-Weg? Das wird dann einmal bei der Installation der App ausgeführt? Bei jedem Start der App wäre das ja sinnfrei, da dann die schon eingetragenen Daten des Users verlorengehen würden.

Wie gesagt, habe vorher noch nie etwas mit Android gemacht, und bin deswegen leicht verwirrt. Danke für jegliche Tipps. :)

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

23.08.2014, 19:00:03 via App

Einfach erstmal prüfen, ob die Datenbank bereits existiert. Wenn ja, dann diese nutzen. Wenn nein, dann anlegen...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Bor
  • Forum-Beiträge: 9

28.08.2014, 13:36:06 via Website

Danke für die Antworten, aber ich komme da im Moment nicht weiter.

Ich habe das Tutorial soweit befolgt, aber es klappt nicht.

Das Hauptproblem ist, dass die Datenbanken-Datei nicht gefunden wird. Ich habe sie, wie im Tutorial beschrieben, in's assets Verzeichnis meiner App kopiert. Bekam aber immer die Meldung, dass das Öffnen der DB fehlgeschlagen ist.

Der Fehler taucht immer auf bei:
"297: E/SqliteDatabaseCpp(5629): sqlite3_open_v2("/data/data/com.example.eat/assets/testdb", &handle, 1, NULL) failed"

Ich habe den Pfad statisch reingeschrieben, und ich habe es auch mit getDatabasePath("testdb" ) versucht. Jedesmal genau das gleiche.

Wäre für weitere Hilfe dankbar.

— geändert am 28.08.2014, 13:36:54

Antworten
Bor
  • Forum-Beiträge: 9

28.08.2014, 14:50:31 via Website

Ich habe nun den Code ein bisschen umgeschrieben, und der Fehler vom letzten Beitrag ist behoben. Nun habe ich ein Fehler beim Kopieren der Datenbank.

08-28 14:47:18.397: E/AndroidRuntime(12719): FATAL EXCEPTION: main
08-28 14:47:18.397: E/AndroidRuntime(12719): java.lang.Error: Error copying database
08-28 14:47:18.397: E/AndroidRuntime(12719): at com.example.eat.DataBaseHelper.createDataBase(DataBaseHelper.java:60)

Er taucht in folgender Funktion in der Zeile mit "OutputStream myOutput" auf.

private void copyDataBase() throws IOException{

    //Open your local db as the input stream
    InputStream myInput = myContext.getAssets().open(DB_NAME);

    // Path to the just created empty db
    String outFileName = DB_PATH + DB_NAME;

    //Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    //transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }

    //Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();

}

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

28.08.2014, 19:07:28 via App

Könntest du sie nicht auch einfach mit FileIO und copy() kopieren?
Vlt funktioniert das?

— geändert am 28.08.2014, 19:07:50

Antworten
Bor
  • Forum-Beiträge: 9

01.09.2014, 11:17:07 via Website

Ludwig Hubert

Könntest du sie nicht auch einfach mit FileIO und copy() kopieren?
Vlt funktioniert das?

Hmm, ich such mal danach.
Das ist halt die erste Android App die ich zu basteln versuche. Habe mal vor sechs Jahren bisschen Java gelernt, aber das wars. Sonst bastel ich eigentlich Webseiten. :/

Antworten