sql >> Databáze >  >> RDS >> SQLite

inicializovat databázi sqlite pro Android

Zdá se, že ostatní odpovědi neodpověděly na to, jak skutečně naplnit databázi počátečními hodnotami, takže se zde podělím o to, jak jsem to udělal.

V zásadě ukládáte sloupce databáze jako pole řetězců do souboru xml. Ukážu pouze jedno pole, ale pro ostatní sloupce můžete udělat více. (U více sloupců však musíte být opatrní, abyste nepokazili pořadí polí a tím nepokazili řádky databáze.)

Vytvořte soubor /res/values/arrays.xml a přidejte do něj pole.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="my_array">

            <item>string 1</item>
            <item>string 2</item>
            <item>string 3</item>
            <item>string 4</item>
            <item>string 5</item>

    </string-array>

</resources>

Toto pole pak můžete získat, když vytvoříte databázi ve své pomocné třídě. Zde je to, co jsem udělal:

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);

    }
}

Další nápovědu naleznete na těchto odkazech:

  • Zdroje řetězců – dokumenty String Array
  • Android:Vyplnění tabulky ze souboru prostředků pomocí pole řetězců (SQLite)

Další věc, kterou jsem udělal, je vytvořit databáze předem a poté je zkopírovat do složky databáze, když je aplikace nainstalována. To může fungovat lépe, pokud máte velké množství dat a nechcete databázi stahovat z internetu. Pokud chcete zkopírovat databázi, podívejte se na tuto odpověď.



  1. Jak změnit výchozí adresář dat MySQL/MariaDB v Linuxu

  2. Co je ekvivalentem tabulky Oracle Dual v MS SqlServer?

  3. Výukový program dělení tabulek a oddílů serveru SQL Server

  4. SQL dotaz na odstranění tabulky v MySQL