我正在开发一个Android应用程序,在用户可以使用该应用程序之前,需要在该应用程序的数据库中填充多个条目(单个表,1000-10000行)。我查看了一些教程,我不确定最好的方法。我是否应该每次启动应用程序时检查数据库是否存在,如果不存在,请创建它并插入我需要的数千条记录?或者有更好的方法来处理这个问题吗?理想情况下,它可以作为应用程序安装过程的一部分包含在内,但我不确定这是否可行。任何反馈将不胜感激。
答案 0 :(得分:20)
这个链接有很好的答案Ship an application with a database
答案 1 :(得分:3)
我要去的方式是在assets文件夹中发送预先填充的数据库。您可以在那里放入文件并按原样使用它们。但请注意,大小限制为1MB,因此您可能需要拆分文件或压缩它们。
压缩是非常方便的,并且得到了os本身的良好支持。
希望这有任何帮助: - )
答案 2 :(得分:3)
以下是如何创建和填充数据库的示例,您可以在应用安装上执行此操作,但这只会创建一个条目,因此可能对您要执行的操作效率低下。
private static class settingsDatabaseHelper extends SQLiteOpenHelper{
//SQL String for creating the table required
private static final String CREATE_SETTINGS_TABLE
= "CREATE TABLE tbl_settings(" +
"_ID INTEGER PRIMARY KEY AUTOINCREMENT," +
"VOIPUSERNAME TEXT," +
"VOIPAUTHID TEXT," +
"PASSWORD TEXT," +
"VOIPDISPLAYNAME TEXT," +
"SIPPROXYSERVER TEXT," +
"SIPREGISTRAR TEXT," +
"SIPREALM TEXT," +
"EXPIRESTIME INTEGER);";
//constructor
public settingsDatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_SETTINGS_TABLE);
ContentValues initialValues = new ContentValues();
initialValues.put("VOIPUSERNAME", "xxxxx");
initialValues.put("VOIPAUTHID", "xxxxxxxxxx");
initialValues.put("PASSWORD", "xxxxxx");
initialValues.put("VOIPDISPLAYNAME", "xxxxxxxxx");
initialValues.put("SIPPROXYSERVER", "xxxxxxxxxxxxx");
initialValues.put("SIPREGISTRAR", "xxxxxxxxxxx");
initialValues.put("SIPREALM", "xxxxxxxxxx");
initialValues.put("EXPIRESTIME", xxxxxxxxxxx);
Log.d("1.6", "gets to here");
db.insert(SETTINGS_TABLE, null, initialValues);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " +
newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + SETTINGS_TABLE);
onCreate(db);
}
}
//end helper class
}
答案 3 :(得分:1)
来自SQLiteOpenHelper的JavaDoc:
管理数据库的助手类 创建和版本管理。您 创建一个子类实现 的onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase,int,int) 以及可选的onOpen(SQLiteDatabase), 这个班负责开放 数据库是否存在,创建它 如果没有,并将其升级为 必要。交易用于 确保数据库始终在 明智的状态。
例如,请参阅 NotePad中的NotePadProvider类 示例应用,在样本中/ SDK的目录。
因此,如果你扩展这个类,你有3个方法在某些情况下会被调用,你可以选择,做什么。 这是最好的做法:)