1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Kann nicht auf meine DB schreiben

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Butch78, 08.12.2011.

  1. Butch78, 08.12.2011 #1
    Butch78

    Butch78 Threadstarter Junior Mitglied

    Beiträge:
    28
    Erhaltene Danke:
    0
    Registriert seit:
    06.12.2011
    Hi Leute,

    hab folgendes kleines Problem. Ich möchte gerne in meiner Datenbank bel. Datensätze löschen.
    Meine DB öffne nich wie folgt:

    SQLiteDatabase checkDB = ​
    null;
    try{
    String myPath =
    DB_PATH + DB_NAME;

    checkDB = SQLiteDatabase.openDatabase(myPath,
    null, SQLiteDatabase.OPEN_READWRITE);
    ...

    Das Auslesen der Daten funzt alles perfekt, nur beim Löschen bekomme ich immer den Fehler: attempt to write a readonly database....

    Ich habe doch aber "OPEN_READWRITE" angegeben. Sollte ich doch auch schreiben dürfen?

    Gruß

    Butch
     
  2. DieGoldeneMitte, 08.12.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    SQLite DBs sind unterm Strich Dateien, die irgendwo im Filesystem liegen. Liegt deine DB irgendwo (zB in den Resourcen), wo die App nicht schreiben darf?
     
  3. Butch78, 08.12.2011 #3
    Butch78

    Butch78 Threadstarter Junior Mitglied

    Beiträge:
    28
    Erhaltene Danke:
    0
    Registriert seit:
    06.12.2011
    Sie liegt in meinem Dataverzeichnis:
    data/data/de.androiddev.myfirstDBapp/databases/mydb.db

    Gruß
     
  4. Butch78, 08.12.2011 #4
    Butch78

    Butch78 Threadstarter Junior Mitglied

    Beiträge:
    28
    Erhaltene Danke:
    0
    Registriert seit:
    06.12.2011
    kann mir jemand weiterhelfen? :cool2:

    Grüße

    Butch
     
  5. MichaelS, 08.12.2011 #5
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    wie kam die DB in diesen Ordner? hast du es über ADB reinkopiert oder wie schaut dein code zum erzeugen der DB aus?
     
  6. Butch78, 08.12.2011 #6
    Butch78

    Butch78 Threadstarter Junior Mitglied

    Beiträge:
    28
    Erhaltene Danke:
    0
    Registriert seit:
    06.12.2011
    Hi,

    das interne Speichern hab ich verworfen. Ist wohl besser wenn ich meine DB auf der SD-Karte sichere.

    Das mache ich wie folgt:
    Ich prüfe erst ob meine DB auf der SD Karte vorhanden ist, falls nicht soll diese neu erstellt werden. Dazu kopiere ich mir einfach eine fertige DB aus meinem Asset - Ordner zu meiner SD Karte. Soweit der Plan. Beim OutputStream bekomme ich eine FileNotFoundException...

    Als Pfad bekomme ich beim Debugen hier mnt/sdcard/myTestApp/test.db
    Sollte er den Pfad + Datei nicht anlegen?
    Und was ist mnt für ein Verzeichnis?

    Code:
    private String DB_NAME = "test.db"
    private String APP_Name = "myTestApp"
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]private[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] String [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]DB_PATH[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = Environment.[I]getExternalStorageDirectory[/I]().getAbsolutePath();[/SIZE]
     
     
    
    [SIZE=2]InputStream myInput = 
    [/SIZE][LEFT][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]myContext[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getAssets().open([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"database/"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]+[/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]DB_NAME[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2]);[/SIZE]
     
    [LEFT][SIZE=2]String outFileName = [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]DB_PATH[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] + [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"/"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] + [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]APP_NAME[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2] + [/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"/"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] + [/SIZE][I][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]DB_NAME[/COLOR][/SIZE][/COLOR][/SIZE][/I][SIZE=2];[/SIZE][/LEFT]
     
    [LEFT][SIZE=2]OutputStream myOutput = [/LEFT]
    [/LEFT]
    [/SIZE][LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] FileOutputStream(outFileName);[/SIZE]
     
     
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]byte[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][] buffer = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]byte[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][1024];[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]int[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] length;[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]while[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ((length = myInput.read(buffer))>0){[/SIZE]
    [SIZE=2]myOutput.write(buffer, 0, length);[/SIZE]
    [SIZE=2]}[/SIZE][/LEFT]
     
    [LEFT][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//Close the streams[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#3f7f5f]
    [/COLOR][/SIZE][SIZE=2]myOutput.flush();[/SIZE]
    [SIZE=2]myOutput.close();[/SIZE][/LEFT]
    [SIZE=2]myInput.close();[/SIZE]
    
    Die notwendigen Rechte habe ich auch gesetzt:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


    Grüße

    Butch
    [/LEFT]
     
  7. GSXDriver, 09.12.2011 #7
    GSXDriver

    GSXDriver Erfahrener Benutzer

    Beiträge:
    183
    Erhaltene Danke:
    11
    Registriert seit:
    22.07.2011
    Hast du deine DB geschützt? Vielleicht vergessen dort die Rechte zu setzen?
     

Diese Seite empfehlen