Как заполнить базу данных из массива? - PullRequest
1 голос
/ 17 апреля 2011

В /values/arrays.xml у меня есть массив, содержащий значения, которые я хотел бы вставить в базу данных sqlite.

В onCreate я пытаюсь получить этот массив и запустить дляцикл до i = длина массива, а затем с помощью db.execSQL ("INSERT INTO ... или, возможно, initialValues.put (...

). Однако я не могу получить getResources () в onCreate,так что я даже не уверен, сработает ли это. Кто-нибудь знает, как лучше всего это сделать?

Ответы [ 3 ]

0 голосов
/ 17 апреля 2011

Если я правильно понял, вы пытаетесь добавить эти начальные значения из dbAdapter. Я не вижу причин, почему вы не должны перенести эту процедуру в основной класс. Мне нравится держать методы dbAdapter, строго связанные с созданием / чтением / записью базы данных, и затем я заполняю список в основной Деятельности. У вас также будет прямой доступ к ресурсам.

В качестве средства повышения производительности вы должны попытаться сделать так, чтобы все записи вставлялись в один оператор, например

db.rawQuery("INSERT INTO tableName(column1, column2) VALUES (valA1, valA2), (valB1, valB2) ....

Вы можете создать эту строку запроса с помощью простых операций String при выполнении итерации по массиву. Удачи! : -)

0 голосов
/ 09 сентября 2014

Мне нужно было сделать то же самое.Я предполагаю, что вы знаете о создании вспомогательного класса базы данных, который расширяет SQLiteOpenHelper, поэтому я не буду вдаваться в подробности.Это используется для создания или обновления базы данных, когда приложение установлено.Когда этот класс вызывается, вы передаете ему Context.Создайте другую переменную уровня класса для хранения контекста, а затем инициализируйте ее в конструкторе.Затем вы используете контекст для getResources(), из которого вы можете получить массив для заполнения вашей базы данных.

private static class DatabaseHelper extends SQLiteOpenHelper {

    private final Context fContext;

    // constructor
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        fContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
                + FIRST_COLUMN + " INTEGER PRIMARY KEY,"
                + SECOND_COLUMN + " TEXT NOT NULL,"
                + THIRD_COLUMN + " INTEGER,"
                + FOURTH_COLUMN + " TEXT NOT NULL"
                + ");");

        // Initialize the db with values from my_array.xml
        final int DEFAULT_THIRD_COLUMN = 1;
        final String DEFAULT_FOURTH_COLUMN = "";
        ContentValues values = new ContentValues();
        Resources res = fContext.getResources();
        String[] myArray = res.getStringArray(R.array.my_array);
        for (String item : myArray){
            values.put(SECOND_COLUMN, item);
            values.put(THIRD_COLUMN, DEFAULT_THIRD_COLUMN);
            values.put(FOURTH_COLUMN, DEFAULT_FOURTH_COLUMN);
            db.insert(TABLE_NAME, null, values);
        }
    }

    @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 " + TABLE_NAME);
        onCreate(db);

    }
}

См. эту ссылку для получения дополнительной справки:

0 голосов
/ 17 апреля 2011

это похоже на то, что вы после: http://developer.android.com/guide/topics/resources/string-resource.html#StringArray

Файл XML сохранен в файле res / values ​​/ strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>

Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

затем просто переберите его как обычно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...