如何导入pre-作出分贝的SQLite由ormlite管理分贝、pre、ormlite、SQLite

2023-09-04 23:29:48 作者:ジ爷丶狠拽彡

我有一个.db文件,我想设置它在我的Andr​​oid应用程序第一次运行。 我用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条记录,当我想通过常规方法将其导入(使用的foreach - 创建命令),它需要很多的时间(约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.

我该如何解决这个问题呢?

How can i solve this problem?

感谢

推荐答案

让说你有一个名为 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.

确保您ppared数据库$ P $下的资产文件夹。 在类的构造函数,扩展OrmLiteSqliteOpenHelper,检查 无论是否存在数据库中。 如果数据库的不存在,复制数据库从资产的文件夹 make sure you prepared database is under assets folder. In the constructor of class that extends OrmLiteSqliteOpenHelper, check whether or not database exist. If database DID NOT exist, copy db from assets folder

(这两个步骤2和3发生内部构造)

(Both Step 2 and 3 happen inside constructor)

这是code样本,它为我工作。

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,会发生错误。您可以拆分数据库解决这样的问题。