2012-03-19 94 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