Android预填充数据库

我正在开发一个Android应用程序,在用户可以使用该应用程序之前,该应用程序需要在该应用程序的数据库中填充多个条目(包含1000-10000行的单个表)。 我已经看了一些教程,我不确定最好的方法来做到这一点。 我应该在每次启动应用程序时检查数据库是否存在,如果不存在,创build它并插入我需要的数千条logging? 还是有更好的方法来处理这个问题? 理想情况下,它可以作为应用程序安装过程的一部分,但我不确定这是否可行。 任何反馈将不胜感激。

Solutions Collecting From Web of "Android预填充数据库"

这个链接有很好的答案用数据库发送一个应用程序

我要去这里的方式是在资产文件夹中发送一个预填充的数据库。 你可以放在那里的文件,并使用它们。 但是要小心,1MB的大小限制,所以也许你将不得不拆分文件或压缩它们。

压缩非常方便,并由os本身支持。

希望这是有帮助的:-)

这里是一个如何创build和填充数据库的例子,你可以在应用程序安装中这样做,这只会创build一个条目,但是对于你想要做的事情可能效率低下。

 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 } 

来自SQLiteOpenHelper的JavaDoc:

pipe理数据库创build和版本pipe理的助手类。 你创build一个实现onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)和onOpen(SQLiteDatabase)的子类,并且这个类负责打开数据库(如果存在的话),创build它,如果没有的话, 。 事务用于确保数据库始终处于合理的状态。

有关示例,请参阅NotePad示例应用程序中的NotePadProvider类,位于SDK的samples /目录中。

所以,如果你扩展这个类,你有3个方法将在某些情况下被调用,你可以select,做什么。 这是最好的做法:)