-2

我不想使用我在计算机上创建的数据库文件。

虽然是可行的,但我认为这是一个不好的解决方法,因为它在创建自己的 api 时没有使用现有的 API。

我希望能够使用 getWritableDataBase()、onCreate(SQLiteDatabase db) 和 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 方法。

所以,这就是我所做的,但由于某种原因它不起作用。我认为如果我要重写现有数据库,它会起作用,但是在查询时我得到表不存在异常。

public void onCreate(SQLiteDatabase db) {
    File f = new File(db.getPath());
    try {
        InputStream is = context.getResources().getAssets().open("words1.db");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        FileOutputStream fos = new FileOutputStream(f);
        fos.write(buffer);
        fos.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}

那么如何在使用现有 api 的同时使用预填充的数据库呢?

4

1 回答 1

1

使用应用程序预先打包数据库的最简单方法是使用Jeff Gilfelt 的SQLiteAssetHelper. 虽然它确实需要您向项目中添加一个小 JAR,但他的代码已经过测试和调试,并且您只需要很少的额外代码。

这是一个示例项目,演示了SQLiteAssetHelper.

于 2013-10-31T12:00:15.727 回答