SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

inicializar um banco de dados sqlite android


As outras respostas não parecem responder como realmente preencher o banco de dados com valores iniciais, então compartilharei como fiz isso aqui.

Basicamente você salva suas colunas de banco de dados como arrays de strings em um arquivo xml. Vou mostrar apenas uma matriz, mas você pode fazer mais para outras colunas. (Você precisaria ter cuidado, no entanto, com várias colunas para não atrapalhar a ordem da matriz e, assim, atrapalhar as linhas do banco de dados.)

Crie um arquivo /res/values/arrays.xml e adicione a matriz a ele.
<?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>

Então você pode obter esse array ao criar o banco de dados em sua classe auxiliar. Aqui está o que eu fiz:
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);

    }
}

Veja estes links para obter mais ajuda:
  • Recursos de string - Documentos de matriz de string
  • Android:preenchendo uma tabela a partir de um arquivo de recurso usando uma matriz de strings (SQLite)

Outra coisa que fiz foi fazer os bancos de dados com antecedência e depois copiá-los para a pasta do banco de dados quando o aplicativo for instalado. Isso pode funcionar melhor se você tiver uma grande quantidade de dados e não quiser baixar o banco de dados da Internet. Se você deseja copiar seu banco de dados, veja esta resposta.