gpt4 book ai didi

android - 如何将预制数据库导入由 ormlite 管理的 sqlite

转载 作者:IT王子 更新时间:2023-10-29 06:23:16 35 4
gpt4 key购买 nike

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

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

我该如何解决这个问题?

谢谢

最佳答案

假设您有一个名为“prepared.db”的数据库,您的包名为“com.example.android”。这就是我所做的。

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

(第 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;
}
}

P.S : 如果数据库文件大小超过 1mb,将会出错。你可以split database to solve这样的问题。

关于android - 如何将预制数据库导入由 ormlite 管理的 sqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19886734/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com