Android Datenbank mit .deleteDatabase(File file) löschen

D

D4Rkl1Gh7

Neues Mitglied
0
Hallo, ich hätte folgende Frage:

Für eine kleine App habe ich mir eine Datenbank erstellt.
Ich habe es auch soweit hinbekommen neue Daten einzufügen, bestimmte Zeilen auszugeben, alle Daten auszugeben und einzelne Einträge zu löschen.

Nun möchte ich meine App so erweitern, dass man über einen Button die gesammte Datenbank löschen kann. Hierbei stoße ich mit meinen Javakentnissen leider an meine Grenze.

Ich möchte die Methode .deleteDatabase(File file) verwenden:

SQLiteDatabase db =this.getWritableDatabase();

File f = new File( ?Filename? );

db.deleteDatabase(f);

Leider finde ich keine Möglichkeit, den Pfad meiner Datenbank zu ermitteln.
Die Datenbank müsste irgendwo in meinem Androidprojekt hinterlegt sein. Leider finde ich den betreffenden Pfad nicht. Kann mir jemand sagen, wo man die Datenbank im Androidprojekt findet / wie man den Pfad automatisch ermitteln kann?

LG D4Rkl1Gh7
 
Vielen Dank für die Antwort,

leider komme ich immernoch nicht weiter.

Ich habe android.content.Context importiert und möchte nun die Methode deleteFile(NameDerDatenbank) aus der Klasse Context verwenden.

Ich bin noch ein Anfänger in Java und habe die Verwendung einer fremden Methode so gelernt:

T/K Name = new T/K();
Context con = new Context();

damit sollte ich die Methoden aus der Klasse Context verwenden können:

SQLiteDatabase db =this.getWritableDatabase();

Context con = new Context();

con.deleteFile(db)

Dies funktioniert aber nicht, da ich kein Objekt der Klasse Context erzeugen kann.
Vermutlich liege ich mit einem Ansatz völlig daneben. Aber ich habe mich heute schon mehrere Stunden durch diverse Foren und Tutorials geklickt und ich verstehe es leider immernoch nicht. Über weitere Hilfe würde ich mich sehr daher sehr freuen!
 
Benutzt du den SQLiteOpenHelper? Beim Erzeugen des Helpers müsstest du einen Context (könnte z.B. auch eine Activity sein) übergeben, den du innerhalb der Klasse verwenden kannst.

So ähnlich sollte das irgendwie aussehen (statt eines Contexts könnte es wie gesagt auch eine Activity sein):

Code:
class XY extends SQLiteOpenHelper {
    private Context context;

    public XY(Context context) {
        super(...);
        this.context = context;
    }
}

Wenns ganz anders aussieht, zeig am besten mal etwas mehr Code deiner Klasse, dann ists etwas einfacher zum helfen :winki:
 
So sieht meine Klasse bisher aus (zur besseren Übersicht habe ich alles erst einmal nur auf den Formelnamen beschränkt, später sollen noch Variablen zu einer Formel zugeordnet werden). Mein Ziel ist es, mathematische Formeln in die Datenbank zu speichern.


Mein Problem: Ich möchte die komplette Datenbank löschen können (um sie dann neu anzulegen), bisher kann ich nur einzelne Einträge löschen. Hier ist das Problem, dass die ID immer "weiterläuft".

public SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);

}
habe ich schon angelegt, ich weiß aber nicht, wie ich das jetzt verwenden kann, um die ganze Datenbank zu löschen.


Wie schon geschrieben bin ich kein Experte, den bisherigen Code habe ich mir anhand verschiedener Tutorials erarbeitet.

Für weitere Hilfe bedanke ich mich schonmal im Voraus


Code:
import android.database.sqlite.SQLiteOpenHelper;
import java.util.LinkedList;
import java.util.List; 
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.*;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class SQLiteHelper extends SQLiteOpenHelper {
    
    // Database Version
    private static final int DATABASE_VERSION = 1;
    // Database Name
    private static final String DATABASE_NAME = "FormelDB";
 
    public SQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION); 
   
    }
 @Override
    public void onCreate(SQLiteDatabase db) {
        
        String CREATE_FORMEL_TABLE = "CREATE TABLE formeln ( " +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "title TEXT)";
 
       
        db.execSQL(CREATE_FORMEL_TABLE);
        
    }

 @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        
        db.execSQL("DROP TABLE IF EXISTS formeln");
 
       
        this.onCreate(db);
        
    }

 private static final String TABLE_FORMELN = "formeln";
 
    
    private static final String KEY_ID = "id";
    private static final String KEY_TITLE = "title";
private static final String[] COLUMNS = {KEY_ID,KEY_TITLE};

public void addFormel(Formel formel){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
        values.put(KEY_TITLE, formel.getTitle()); 
 db.insert(TABLE_FORMELN, 
                null, 
                values);
 db.close();
 }

public void deleteFormel(Formel formel) {
 
       
        SQLiteDatabase db = this.getWritableDatabase();
 
       
        db.delete(TABLE_FORMELN,
                KEY_ID+" = ?",
                new String[] { String.valueOf(formel.getId()) });
 
       
        db.close();
 
       
 
    }

// Liefert alle Formeln
    public List<Formel> getAllFormeln() {
        List<Formel> formeln = new LinkedList<Formel>();
 
        String query = "SELECT  * FROM " + TABLE_FORMELN;
 
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(query, null);

 Formel formel = null;
        if (cursor.moveToFirst()) {
            do {
                formel = new Formel();
                formel.setId(Integer.parseInt(cursor.getString(0)));
                formel.setTitle(cursor.getString(1));

                 formeln.add(formel);
            } while (cursor.moveToNext());
            return formeln
        }
        public void deleteFormel(Formel formel) {
 
        
        SQLiteDatabase db = this.getWritableDatabase();
 
       
        db.delete(TABLE_FORMELN,
                KEY_ID+" = ?",
                new String[] { String.valueOf(formel.getId()) });
 
       
        db.close();
 
        
 
    }

   public void deleteDatabase(){

        //Hier komme ich nicht weiter

  }
        
}
 
Ich habe mich heute den Nachmittag nochmal drangesetzt und konnte mein Problem dann schließlich doch noch lösen. Soweit hatte ich schon fast alles richtig, eine Sache hat noch gefehlt:
Code:
public class SQLiteHelper extends SQLiteOpenHelper {
    
    // Database Version
    private static final int DATABASE_VERSION = 1;
    // Database Name
    private static final String DATABASE_NAME = "FormelDB";
   
    public SQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION); 
   
    }
Hier muss der Code wie Folgt angepasst werden:
Code:
public class SQLiteHelper extends SQLiteOpenHelper {
    
    // Database Version
    private static final int DATABASE_VERSION = 1;
    // Database Name
    private static final String DATABASE_NAME = "FormelDB";
    private final Context myContext;
 
    public SQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION); 
        this.myContext = context;  
    }
jetzt ist auch das verwenden von Context kein Problem mehr:

Code:
@SuppressLint("NewApi") public void deleteDatabase(){
        
               
        
        
        try{
            File outFile =myContext.getDatabasePath(DATABASE_NAME);
        
       
        
        
        db.deleteDatabase(outFile);
        db.close();
        }
        catch(Exception e){
            throw new IllegalArgumentException("Fehler: "+e);
            
        }

        
    }
 

Ähnliche Themen

B
Antworten
4
Aufrufe
493
bb321
B
FabianDev
Antworten
5
Aufrufe
558
swa00
swa00
S
Antworten
33
Aufrufe
2.673
Sempervivum
S
Zurück
Oben Unten