在分布式应用程序的.apk中嵌入数据库[Android]

Sep*_*phy 6 database android embedded-database

我的问题是我觉得很简单,但我不认为答案是...我有相当多的内容在我的应用程序,使其正常运行,我想将所有的它在的数据库,并将与市场中的应用程序一起分发到嵌入式数据库中.唯一的麻烦是我不知道该怎么做.我知道,我可以从Eclipse的DDMS提取文件.db的与我的数据库的内容,我想我需要把它放在我的应用程序的资源文件夹,但随后如何使应用程序中使用它来重新生成应用程序数据库?如果你有任何代码或帮助的链接,这将是伟大的.谢谢

sea*_*ges 13

为了实现您的要求,您可以将.db文件放在您的assets /目录中,并在第一次启动应用程序时将其复制到位.....

final String DB_DESTINATION = "/data/data/YOUR_PACKAGE_NAME/databases/MyDatabaseFile.db";

// Check if the database exists before copying
boolean initialiseDatabase = (new File(DB_DESTINATION)).exists();
if (initialiseDatabase == false) {

    // Open the .db file in your assets directory
    InputStream is = getContext().getAssets().open("MyDatabaseFile.db");

    // Copy the database into the destination
    OutputStream os = new FileOutputStream(DB_DESTINATION);
    byte[] buffer = new byte[1024];
    int length;
    while ((length = is.read(buffer)) > 0){
        os.write(buffer, 0, length);
    }
    os.flush();

    os.close();
    is.close();
}
Run Code Online (Sandbox Code Playgroud)

其中"initialiseDatabase"是指示应用程序是否第一次启动的标志.

虽然,如果您正在考虑存储大量数据,正如您所提到的:我强烈建议您避免使用它膨胀APK文件,并使用Internet连接从应用程序之后下载数据库记录(从托管服务器)推出.这样,您可以显示一个进度条,向用户显示他们为什么要等待很长时间才能开始使用该应用程序.使APK特别大通常会阻止人们首先安装它.