我希望在我的android包中包含大量数据。我可以使用数据库吗?如果是,那么如何使用APK打包数据库表?
答案 0 :(得分: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) {}
}
}
之后,您可以按常规方式使用数据库。
答案 1 :(得分:0)
要创建表格,您可以使用SQLiteOpenHelper
(参考here和信用there)
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的大小(如果大小是您的担忧)。
答案 2 :(得分:0)
由于APK仍然限制在50MB,您可以尝试将数据库添加为扩展文件,与应用程序分开。以下是更多详情:http://android-developers.blogspot.com/2012/03/android-apps-break-50mb-barrier.html