sql >> データベース >  >> RDS >> SQLite

sqliteデータベースandroidを初期化します

    他の回答は、データベースに初期値を実際に入力する方法に答えていないようだったので、ここでそれをどのように行ったかを共有します。

    基本的に、データベースの列を文字列配列としてxmlファイルに保存します。 1つの配列だけを表示しますが、他の列についてはさらに多くのことを行うことができます。 (ただし、配列の順序を乱さないように複数の列を使用して、データベースの行を乱さないように注意する必要があります。)

    /res/values/arrays.xmlファイルを作成し、それに配列を追加します。

    <?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>
    

    次に、ヘルパークラスでデータベースを作成するときに、その配列を取得できます。これが私がしたことです:

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

    詳細については、次のリンクを参照してください:

    • 文字列リソース-文字列配列のドキュメント
    • Android:文字列配列(SQLite)を使用してリソースファイルからテーブルを埋める

    私が行ったもう1つのことは、事前にデータベースを作成し、アプリのインストール時にデータベースフォルダーにコピーすることです。大量のデータがあり、インターネットからデータベースをダウンロードしたくない場合は、これでうまくいく可能性があります。データベースをコピーする場合は、この回答を参照してください。



    1. PostgreSQLのキーと値のペア

    2. PostgreSQLで現在の日付を取得する方法

    3. XML_LOAD()を使用してXMLファイルをMySQLデータベーステーブルにインポートする方法。働き

    4. AndroidでProguardとSQLcipherを使用しようとしているときにNoClassDefFoundErrorを取得する