SQLite anschließen /FileNotFound

M

Myriador

Neues Mitglied
0
Hallo,

Nun bin ich ganz neu hier und habe gleich eine Frage.

ich versuche gerade einigermaßen verzweifelt, eine schon existierende sqlitedatei in einer App zu verwenden.

Dazu habe ich eine Helperclass, die wie folgt aussieht:


package com.example.myapp;
public class Helper extends SQLiteOpenHelper {
private static String path = "/data/data/com.example.myapp/databases/";
private static String db = "nn"; private static String dbpath = path + db;
private SQLiteDatabase myDB;
private Context con;

public Helper(Context context) {
super(context, db, null, 1); this.con = context;
}

public Context getContext(){
return this.con; }

public void createDataBase() throws IOException{

if(!checkDataBase()){
this.getReadableDatabase();
try {
copyDataBase(); }
catch (IOException e) {
System.out.println("no Database");
}
}
}

private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try{
checkDB = SQLiteDatabase.openDatabase(dbpath, null, SQLiteDatabase.OPEN_READONLY); }
catch(SQLiteException e){ }
if(checkDB != null){
checkDB.close(); return true; }
else {return false;} }

private void copyDataBase() throws IOException {
InputStream myInput = con.getAssets().open(db);
OutputStream myOutput = new FileOutputStream(dbpath);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close(); }


public void openDataBase() throws SQLException{
myDB = SQLiteDatabase.openDatabase(dbpath, null, SQLiteDatabase.OPEN_READONLY); }

@Override
public synchronized void close() {
if(myDB != null) myDB.close(); super.close(); }

@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub }

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub }


}

Die Datei selbst liegt in assets.


Und nun kriege ich in der copy-Methode jedes Mal eine FilenotFoundException - ich hae schon zig verschiedene Schreibweisen ausprobiert.

Fällt irgendwem hier noch was ein was ich vergessen habe?
 
Zuletzt bearbeitet:
Du suchst deine Datenbank im falschen Verzeichnis, weshalb du ein FilenotFoundException bekommst.

AssetManager | Android Developers

----

Nachtrag:

Würde mal sagen, dass das Verzeichnis /databases/ nicht existiert. Du muss zuerst alle Verzeichnise und Dateien erstellen, bevor du dort etwas hinein kopierst.
 
Zuletzt bearbeitet:
Du suchst in deiner 'copyDataBase()' auf 'db', anstatt auf 'dbpath'. Der Dateiname, ohne Pfadangabe, muß zur Laufzeit nicht unbedingt auch zutreffend sein, abhängig vom cwd (current work directory) deiner Applikation.
 
Zuletzt bearbeitet:
Nachtrag:

- das Verzeichnis HAT existiert, ein Test, mit dem ich mir einfach alle Dateien im Verzeichnis habe ausgeben lassen lief einwandfrei durch und spuckte auch die db mit aus.

- gelöst habe ich das jetzt mit dem AssetHelper - nett, dass Android da mittlerweile schon selbst was zur Verfügung stellt.
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.016
swa00
swa00
M
Antworten
5
Aufrufe
1.077
markusk73
M
Zurück
Oben Unten