如何将预制db导入ormlite管理的sqlite

Hos*_*ian 7 database sqlite import android ormlite

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

在该.db文件中有大约7000条记录,当我想通过常用方法导入它时(使用foreach - create命令),导入需要很多时间(大约2-3分钟).

我怎么解决这个问题?

谢谢

Hei*_*ein 18

假设你有一个名为" prepared.db"的数据库,你的包名是" com.example.android".这就是我的工作.

  1. 确保您准备好的数据库位于assets文件夹下.
  2. 在扩展OrmLiteSqliteOpenHelper的类的构造函数中,检查数据库是否存在.
  3. 如果数据库DID不存在,请从assets文件夹复制db

(步骤2和3都发生在构造函数内)

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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