在apk中包含现有数据库

时间:2014-01-14 02:58:49

标签: android database android-sqlite

我有一个包含一些数据的现有数据库(类似字典),我想把它放在安装apk-package中,我会解释 - 我只是想在安装应用程序时使用我现有的数据库。哪种方法最好?

  1. 将数据库放入res / raw /,然后在首次启动应用时将其复制到SD卡上。

  2. 创建一个SQL脚本,该脚本将创建数据库结构并填充数据并在db-helper类中执行。我认为这是一个非常糟糕的主意,因为我从所有表中获得了大约100万条记录,并且很难使用该脚本。

  3. 使用静态不可写数据库,例如post

  4. 还有别的吗?

3 个答案:

答案 0 :(得分:2)

我建议您使用SQLiteAssetHelper库(https://github.com/jgilfelt/android-sqlite-asset-helper)。它是一个Android助手类,可以使用应用程序的原始资产文件管理数据库创建和版本管理。

此类为开发人员提供了一种简单的方法,可以使用现有的SQLite数据库(可能预填充数据)发布他们的Android应用程序,并管理它的初始创建以及后续版本发布所需的任何升级

您预装的SQLite数据库将存储在assets文件夹中的压缩文件中,SQLiteAssetHelper .jar库将存储在您的lib文件夹中,请确保将其添加到构建路径中。

然后你可以用以下内容创建一个类:

一个示例类,用于加载预加载的歌曲标题及其标题数据库:

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class DatabaseManager {
    //  DECLARATION OF ALL THE VARIABLES AND CONSTANT THAT WILL BE USED TO CREATE THE TABLE

    private static final String DATABASE_NAME = "SongDatabase"; 
    private static final String DATABASE_TABLE = "Song";

    //  DECLARATION OF ALL THE COLUMN REQUIRED TO BE CREATED

    public static final String KEY_ROWID = "_id";
    public static final String KEY_AUTHOR = "author";
    public static final String KEY_TITLE = "title";

    private DatabaseHelper mDbHelper; 
    private SQLiteDatabase ourDatabase;
    private final Context ourContext;

    public class DatabaseHelper extends SQLiteAssetHelper {     
        public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);  
        }
    }

    public DatabaseManager(Context context){
        ourContext = context;       
    }

    //  open the database for access
    public DatabaseManager open() throws SQLException {
        mDbHelper = new DatabaseHelper(ourContext);
        ourDatabase = mDbHelper.getWritableDatabase();
        return this;
    }

    //  Enter Values into the database or create database values
    public long createRecords(String author, String title) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_AUTHOR, author);
        initialValues.put(KEY_TITLE, title);
        return ourDatabase.insert(DATABASE_TABLE, null, initialValues); 
    }

    // close the database after creating the values for security purposes
    public void close() {
        mDbHelper.close();
    }
}

答案 1 :(得分:1)

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

有了这个,您可以将数据存储在您的资产文件夹中,并将其复制到您的apk数据库 问题是文件大小有限制,即10MB,你无法删除数据cos资产文件夹是只读的,所以你将有重复并增加apk大小

https://github.com/jgilfelt/android-sqlite-asset-helper

另一种选择是你直接使用它 祝你好运:)

答案 2 :(得分:0)

@Whizzzkey根据您的要求就是答案:)

将数据库放在assets文件夹中,虽然您可能不会从中执行写操作,为此您必须将db复制到SD卡(这是昂贵的)或内存。

快乐的编码。