2012-03-19 98 views
0

我有一個預製的SQLite數據庫,我通過AsyncTask從網上下載。它下載文件並將其存儲在SD卡上的/ data/databases /我已檢查數據庫文件,並且它已成功下載並具有所有適當的表和數據,但每次嘗試打開數據庫並顯示存儲的數據時,我都會得到以下打開下載SQLite數據庫

03-19 18:43:10.204: E/AndroidRuntime(3057): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ondrovic.downloader/com.ondrovic.downloader.Main}: android.database.sqlite.SQLiteException: no such table: beers: , while compiling: SELECT * FROM beers ORDER BY _id 

這是沒有意義的,因爲該表是有

也許我databasehelper類是錯誤的或我打電話是錯誤的。

這裏是我的database.java

package com.ondrovic.downloader; 

    import java.io.File; 

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

    public class Database extends SQLiteOpenHelper{ 
//File rDIR = Environment.getExternalStorageDirectory(); 
private static String DBPATH = "/data/databases/BOOMBOZZ/"; 
private static String DBNAME = "boombozz.db"; 
private static int DBVER = 1; 

private SQLiteDatabase db; 
private final Context dbContext; 

public Database(Context context) { 
    super(context, DBNAME, null, DBVER); 
    this.dbContext = context; 
} 

public void open() { 
    String myPath = DBPATH + DBNAME; 
    db = SQLiteDatabase.openDatabase(Environment.getExternalStorageDirectory() + myPath, null, SQLiteDatabase.OPEN_READWRITE); 
} 

public synchronized void close() { 

    db.close(); 
    super.close(); 
} 

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

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 

    } 
} 

而且這裏是我在我的主類

db = (new Database(this)).getWritableDatabase(); 

任何建議,稱這是?

感謝

+0

http://stackoverflow.com/questions/9109438/using-already-created-database-with-android/9109728#9109728 – 2012-04-06 05:48:15

回答

1

也許我databasehelper類是錯誤的

是。

您需要在SQLiteOpenHelper子類上實現onCreate()onUpgrade()。你,無論出於何種原因,都決定不這樣做。因此,您的SQLiteOpenHelper將不起作用。

然而,由於SQLiteOpenHelper不是設計來支​​持你下載的數據庫的情況下,你應該只讓Database沒有擴展SQLiteOpenHelper,開放和自己關閉數據庫,因爲你已經做的部分。

+0

所以我做了一些檢查,它是下載我想要的文件,但後來我也得到/ data//datbase中的數據庫,它正在嘗試查找不存在的表。我將再次嘗試使用 – ondrovic 2012-03-19 23:28:36

+0

將下載數據庫文件從SD卡複製到/ data/data/ /db.db與SQLiteOpenHelper一起工作? – ondrovic 2012-03-20 01:33:57

+0

@ondrovic:是的,只要SQLiteOpenHelper會在那裏看到數據庫文件,不需要調用你的'onCreate()',並且應該能夠正常打開和關閉它。我認爲你爲什麼要下載到外部存儲是有原因的。 – CommonsWare 2012-03-20 11:01:30