Database Android预填充数据库

Database Android预填充数据库,database,android,Database,Android,我正在开发一个Android应用程序,在用户使用该应用程序之前,需要在该应用程序的数据库中填充多个条目(一个表,有1000-10000行)。我看过一些教程,我不确定最好的方法。我是否应该在每次启动应用程序时检查数据库是否存在,如果不存在,则创建数据库并插入我需要的数千条记录?还是有更好的方法来处理这个问题?理想情况下,它可以作为应用程序安装过程的一部分,但我不确定这是否可行。任何反馈都将不胜感激。我在这里的方式是在资产文件夹中提供一个预填充的数据库。您可以在那里插入文件并按原样使用它们。但是,请

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

我在这里的方式是在资产文件夹中提供一个预填充的数据库。您可以在那里插入文件并按原样使用它们。但是,请注意,有1MB的大小限制,因此可能需要拆分或压缩文件

压缩非常方便,操作系统本身也很好地支持压缩


希望这有帮助:-)

来自SQLiteOpenHelper的JavaDoc:

用于管理数据库的帮助器类 创建和版本管理。你 创建一个子类实现 onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase,int,int) 以及可选的onOpen(SQLiteDatabase), 这门课负责开课 数据库(如果存在),创建它 如果没有,请将其升级为 必需的交易习惯于 确保数据库始终处于 明智的状态

有关示例,请参见 记事本中的NotePadProvider类 示例应用程序,在示例中/ SDK的目录

所以如果你扩展这个类,你有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
}

请解释一下否决票的原因?我如何在“应用程序安装”中执行此操作?这部分代码是否仅在安装时执行?我不想将此作为答案发布,因为它不是真正的。考虑编写java在Android上构建数据库(例如,用ADB推送的CSV文件)。然后将其压缩到
/assets
进行安装。在非Android环境中尝试完全符合Android的期望对我来说是一个脆弱的构建步骤。@Jondi212链接中的HTML错误。大小限制为1 MB。