如何将预制的数据库导入由ormlite管理的sqlite [英] How to import pre-made db to sqlite managed by ormlite

查看:190
本文介绍了如何将预制的数据库导入由ormlite管理的sqlite的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个.db文件,我想设置它在我运行的Android应用程序。
我使用OrmLite来管理我的数据库。

I have a .db file and I want to setup it at first run of my android application. I use OrmLite to manage my database.

在那个.db文件中有一个大约7000条记录,当我想通过常用的方法导入它 - 创建命令)需要很多时间(约2-3分钟)导入。

In that .db file a have about 7000 records and when I want to import it by common methods (use foreach - create command ) it takes many time (about 2-3 mins) to import.

我如何解决这个问题?

感谢

推荐答案

让你有数据库名为 prepared.db ,您的软件包名称为 com.example.android 。这是我做的。

Let say you have database named "prepared.db" and your package name is "com.example.android". This is what I do.


  1. 确保准备好的数据库在assets文件夹下。

  2. 在扩展OrmLiteSqliteOpenHelper的类的构造函数中,检查
    是否存在数据库。

  3. 如果数据库 DID不存在,请从资产文件夹复制db

  1. make sure you prepared database is under assets folder.
  2. In the constructor of class that extends OrmLiteSqliteOpenHelper, check whether or not database exist.
  3. If database DID NOT exist, copy db from assets folder



< p <>

(Both Step 2 and 3 happen inside constructor)

这是代码示例,它适用于我。

This is code sample and It work for me.

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

    private static final String DATABASE_NAME = "prepared.db";
    private static final String DATABASE_PATH = "/data/data/com.example.android/databases/";


    public DatabaseHelper(Context context) {
        super(context, DATABASE_PATH+DATABASE_NAME, null, DATABASE_VERSION);

        boolean dbexist = checkdatabase();
        if (!dbexist) {

            // If database did not exist, try copying existing database from assets folder.
            try {
                File dir = new File(DATABASE_PATH);
                dir.mkdirs();
                InputStream myinput = mContext.getAssets().open(DATABASE_NAME);
                String outfilename = DATABASE_PATH + DATABASE_NAME;
                Log.i(DatabaseHelper.class.getName(), "DB Path : " + outfilename);
                OutputStream myoutput = new FileOutputStream(outfilename);
                byte[] buffer = new byte[1024];
                int length;
                while ((length = myinput.read(buffer)) > 0) {
                    myoutput.write(buffer, 0, length);
                }
                myoutput.flush();
                myoutput.close();
                myinput.close();            
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /*
    * Check whether or not database exist
    */
    private boolean checkdatabase() {
        boolean checkdb = false;

        String myPath = DATABASE_PATH + DATABASE_NAME;
        File dbfile = new File(myPath);
        checkdb = dbfile.exists();

        Log.i(DatabaseHelper.class.getName(), "DB Exist : " + checkdb);

        return checkdb;
    }
}



PS:如果数据库文件大小超过1mb ,将发生错误。您可以拆分数据库来解决此类问题。

这篇关于如何将预制的数据库导入由ormlite管理的sqlite的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆