如何使数据在数据库内部而不需要等待数据逐个插入?

时间:2014-04-11 15:20:42

标签: android dictionary

当安装应用程序时,如何使用merriam字典(离线词典)这样的字典,这些字词是否立即出现,并且不需要时间将单词和定义列表插入数据库?我是初学者,目前正在开发一个包含大约30K字的Android应用程序,它需要大约15分钟以上才能将所有数据插入到数据库中,然后用户才能搜索该特定数据。我正在寻找一种可以解决这个问题的方法。有人可以告诉我一种方法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

我的猜测是这些应用程序正在使用已经SQLite数据库,并且已经填充了所需的所有数据。 您可以使用以下内容将填充的数据库导入应用程序:

公共类DataBaseAdapter {

String DB_NAME = "DBNAME.db";
String DIR = "/data/data/packageName/databases/";
String DB_PATH = DIR + DB_NAME;

private DataBaseHelper mDbHelper;
private SQLiteDatabase db;
private Context context;

public DataBaseAdapter(Context context) {
    this.context = context;
    mDbHelper = new DataBaseHelper(this.context);
}

class DataBaseHelper extends SQLiteOpenHelper {
    private boolean createDatabase = false;
    @SuppressWarnings("unused")
    private boolean upgradeDatabase = false;
    Context context;

    public DataBaseHelper(Context context) {
        super(context, DB_NAME, null, 1);
        this.context = context;
    }

    public void initializeDataBase() {

        getWritableDatabase();

        if (createDatabase) {
            try {
                copyDataBase();
            } catch (IOException e) {
                throw new Error("Error copying database");
            }
        }

    }

    private void copyDataBase() throws IOException {
        InputStream input = context.getAssets().open(DB_NAME);
        OutputStream output = new FileOutputStream(DB_PATH);

        byte[] buffer = new byte[1024];
        int length;

        try {
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
        }

        finally {
            try {
                if (output != null) {
                    try {
                        output.flush();
                    } finally {
                        output.close();
                    }
                }
            } finally {
                if (input != null) {
                    input.close();
                }
            }
        }

        getWritableDatabase().close();
    }

    public void onCreate(SQLiteDatabase db) {

        createDatabase = true;
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        upgradeDatabase = true;

    }

    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
    }
}

public DataBaseAdapter open() {
    mDbHelper.initializeDataBase();
    if (db == null)
        db = mDbHelper.getWritableDatabase();
    return this;
}

public void close() {
    db.close();
}

}

然后你可以添加从数据库中获取数据的方法,这个类可以在你的活动中使用,通过调用open然后获取数据然后关闭。

答案 1 :(得分:0)

您的应用程序应包含预先填充的数据库,以便在安装时进行脱机访问。这将避免每个用户必须在他们的设备上运行INSERT步骤。

是否有特殊原因需要在安装后运行INSERTS?