0

我希望在我的 android 包中打包大量数据。我可以为此使用数据库吗?如果是,那么如何用 APK 打包数据库表?

4

3 回答 3

1

您可以将数据库放在assets/文件夹中,当您的应用程序第一次运行时,使用以下代码将您的数据库复制到它们应该在的位置:

private void copyFromAssets() {
    InputStream istream = null;
    OutputStream ostream = null;
    try {
        istream = context.getAssets().open(DATABASE_NAME);
        File path = context.getDatabasePath(DATABASE_NAME);
        if (path.exists() == false)
            path.createNewFile();

        ostream = new FileOutputStream(path);

        byte[] buffer = new byte[8192];
        int length;
        while ((length = istream.read(buffer))>0) {
            ostream.write(buffer, 0, length);
        }
        ostream.flush();
    } catch (Exception e) {
        e.printStackTrace();
        Log.e(TAG, "Failed to copy database: " + DATABASE_NAME);
    } finally {
        try {
            if (ostream != null) ostream.close();
            if (istream != null) istream.close();
        } catch (IOException e) {}
    }
}

之后,您可以按照通常的方式使用您的数据库。

于 2012-04-25T08:33:30.810 回答
0

由于 APK 仍然限制为 50MB,您可以尝试将数据库添加为扩展文件,与应用程序分开。这里有更多细节:http ://android-developers.blogspot.com/2012/03/android-apps-break-50mb-barrier.html

于 2012-04-26T05:58:30.530 回答
0

要创建表格,您可以使用SQLiteOpenHelper(参考这里和信用那里

private class MyOpenHelper extends SQLiteOpenHelper {
    public MyOpenHelper(Context context)
    {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override public void onCreate(SQLiteDatabase db)
    {
       // Replace this SQL code with the code for your database.
        String query = "CREATE TABLE people (" +
          "_id integer primary key autoincrement not null, " +
          "first_name text, last_name text);";
        db.execSQL(query);
    }

    @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        // Called when the database needs to be upgraded. The implementation
        // should use this method to drop tables, add tables, or do anything
        // else it needs to upgrade to the new schema version.
    }
}

如果需要,将在访问时创建或更新该表。
如果需要,您还可以在创建表后填充数据库。
如果它可以帮助减小 APK 的大小(如果大小是您关心的问题),您可能希望提供一个 Web 服务来提供初始数据。

于 2012-04-25T08:21:08.920 回答