Android предзаполненная база данных [дубликат]

Этот вопрос уже имеет ответ здесь:

Я работаю над приложением Android, для которого будут нужны несколько записей (единственная таблица с 1000-10000 строками) заполненный в базе данных того приложения, прежде чем пользователь сможет использовать то приложение. Я осмотрел некоторые учебные руководства, и я не уверен в лучшем способе сделать это. Я должен просто проверить, существует ли база данных каждый раз, когда приложение запускается и, если это не там, создайте его и вставьте тысячи записей, в которых я нуждаюсь? Или есть ли лучший способ решить эту проблему? Идеально, это могло быть включено как часть процесса установки приложения, но я не уверен, возможно ли это. Любая обратная связь значительно ценилась бы.

31
задан Blather 9 March 2010 в 12:57
поделиться

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
ответ дан 27 November 2019 в 22:52
поделиться

JavaDoc от SQLiteOpenHelper:

Вспомогательный класс для управления созданием базы данных и управлением версиями. создания и управления версиями. Вы создаете подкласс, реализующий onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) и, по желанию, onOpen(SQLiteDatabase), и этот класс заботится об открытии базы данных, если она существует, о ее создании если она не существует, и обновляет ее по мере при необходимости. Транзакции используются для того, чтобы чтобы убедиться, что база данных всегда находится в разумном состоянии.

Для примера см. класс NotePadProvider в приложении NotePad пример приложения, в каталоге samples/ каталога SDK.

Таким образом, если вы расширите этот класс, у вас будет 3 метода, которые будут вызываться в некоторых случаях, и вы можете выбирать, что делать. Это лучшая практика :)

1
ответ дан 27 November 2019 в 22:52
поделиться

Я собираюсь отправить предварительно заполненную базу данных в папку с ресурсами. Вы можете поместить туда файлы и использовать их как есть. Однако помните, что существует ограничение на размер в 1 МБ, поэтому, возможно, вам придется разделить файлы или сжать их.

Сжатие очень удобно и хорошо поддерживается самой операционной системой.

надеюсь, что это помогло: -)

3
ответ дан 27 November 2019 в 22:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: