如何导入pre-作出分贝的SQLite由ormlite管理 [英] How to import pre-made db to sqlite managed by ormlite
问题描述
我有一个.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条记录,当我想通过常规方法将其导入(使用的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,会发生错误。您可以拆分数据库解决这样的问题。
这篇关于如何导入pre-作出分贝的SQLite由ormlite管理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!