将现有数据库包含在apk中

3
我有一个现有的数据库,里面存放着类似于词典的一些数据,我想将它放入安装apk包中,让应用程序在安装后直接使用该数据库。哪种方法是最好的呢?
  1. 将数据库文件放在res/raw/目录下,并在应用程序首次启动时将其复制到SD卡上。
  2. 创建一个SQL脚本来创建数据库结构并填充数据,在db-helper类中执行。但是这种做法并不明智,因为所有表格中大约有100万条记录,使用这种脚本将会很困难。
  3. 这篇文章所示,使用静态的不可写的数据库。
还有其他什么需要翻译的吗?

将数据库放在资产文件夹中,虽然您可能无法从中执行写操作,因此您需要将数据库复制到SD卡(这很昂贵)或内存。 - Rat-a-tat-a-tat Ratatouille
@TheUnknown,请将您的评论发布为答案,以便我可以接受它作为最佳答案。 - whizzzkey
3个回答

2
我建议您使用SQLiteAssetHelper库 (https://github.com/jgilfelt/android-sqlite-asset-helper)。这是一个Android帮助类,使用应用程序的原始资源文件管理数据库创建和版本管理。
该类为开发人员提供了一种简单的方法,以在Android应用程序中运送已存在的SQLite数据库(可以预先填充数据),并管理其初始创建和任何升级所需的后续版本发布。
您预加载的SQLite数据库将存储在资产文件夹中的压缩文件中,而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

0

根据您的要求,这里是答案 :)

将数据库放在资产文件夹中,虽然您可能无法从中执行写操作,为此您需要将数据库复制到SD卡(这很昂贵)或内存中。

编码愉快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接