【Kotlin】SQL操作とListViewの連携方法

AndroidのSQLでテーブルを作って、選択、挿入、削除、変更などの一通りの操作方法を説明します。

[toc]

テーブルの作成

id(integer、主キーかつ自動加算)、名前(text)、年齢(integer)を定義したテーブルを作成します。

class MyDbHelper(context: Context?) :
    SQLiteOpenHelper(context, "test.db", null, 1) {
    override fun onCreate(sqLiteDatabase: SQLiteDatabase) {

        //create
        sqLiteDatabase.execSQL("create table members(_id integer primary key autoincrement,name text,age integer)")

    }

    override fun onUpgrade(sqLiteDatabase: SQLiteDatabase, i: Int, i2: Int) {}
}

ヘルパーの宣言と解放

 private val _helper = DatabaseHelper(this@MainActivity)

 override fun onCreate(savedInstanceState: Bundle?) {
 :
 }
    override fun onDestroy() {
        _helper.close()
        super.onDestroy()
    }

クエリー

テーブルの中身を全て検索します。

      val db = _helper.writableDatabase

        //DBから全てのデータを取得
        val c = db.query("members",null,null,null,null,null,null)

シンプルカーソルアダプターを使い、ListViewに表示させます。

        //表示するカラム名
        val from = arrayOf("_id", "name")

        //バインドするViewリソース
        val to = intArrayOf(android.R.id.text1, android.R.id.text2)

        //adapter生成
        val adapter = SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, c, from, to, 0)

        //bindして表示
        myListView.adapter = adapter

「android.R.layout.simple_list_item_2」はAndroidに元々入っているレイアウトです。

TextViewである「android.R.id.text1」「 android.R.id.text2」が縦に2つ並んでいます。

SQLのカラムとテキストをどのようにマッピングさせるか、アダプターで指定するのです。

注意点:ここでandroid.Rをimportしてはいけません。

挿入

IDをオートインクリメントにしているので、挿入時に指定しなくて良いです。

val values = ContentValues()
values.put("name", name)
values.put("age", 31)

//DBに挿入
db.insert("members", null, values)

削除

削除するIDを指定します。

        val db = _helper.writableDatabase

        db.delete("members","_id = ?", arrayOf(selectedId.toString()))

変更

変更は、削除と挿入を組み合わせます。

            db.delete("members","_id = ?", arrayOf(selectedId.toString()))

            val values = ContentValues()
            values.put("_id",selectedId)
            values.put("name", name)
            values.put("age", 31)

            db.insert("members",null, values)

挿入・削除・変更をした場合、SQLのDBが変更されますが、ListViewの表示は変わりません。

ListViewの表示もアップデートしたい場合には、挿入・削除・変更をした後に、「クエリー」で紹介したコードを実行しましょう。

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog