Android(kotlin) SQLite データの選択
完成イメージ
リストの中の項目をタッチすると、その項目に保存されていたデータが読み込まれて画面に出力されます。
データ選択処理(MainActivity.kt)
データ取得処理の流れ
1. データベース接続オブジェクトを取得する
2. SQL文を作成する
3. SQL文を実行する
4. カーソルオブジェクトをループし、データを取得する
5. 結果を画面に反映させる
private inner class ListItemClickListener: AdapterView.OnItemClickListener { override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { Log.d("MainActivity", "Called onItemClick()") // Set selected list number levelId = position // set selected list name levelName = parent.getItemAtPosition(position) as String // Find TextView for level name val tvLevelName = findViewById<TextView>(R.id.tvSelectedLevel) // Show selected level name tvLevelName.text = levelName // Find button for save val btnSave = findViewById<Button>(R.id.btnSave) // Enable the button btnSave.isEnabled = true // Get database connection object val db = dbHelper.writableDatabase // Statement for Select val sql = "SELECT * from levels where _id = $levelId" val cursor = db.rawQuery(sql, null) // Variable for result var result = "" // Get result from cursor object while(cursor.moveToNext()) { // Get column index val idxDescription = cursor.getColumnIndex("description") result = cursor.getString(idxDescription) } // Show result val description = findViewById<EditText>(R.id.etNote) etNote.setText(result) } }
メモ
val sql = "SELECT * from levels where _id = $levelId"
>${levelId} と書くのが一般的だった気がしますが、現在 {} は不要のようです。
var result = ""
> 今回は取得されるデータが1行しかない(Select文の結果が必ず1レコードのみ) であるため、単体の変数を用意していますが、もし複数レコードの結果が期待される場合は、List(配列)の変数を用意し、それに順次格納していくような流れが想定されます。
ビルド・実行
Run ボタンをクリックし、エミュレータを起動させます。
リストの中から、"Normal" をタッチし、適当な Description を入力して、Save ボタンをタッチします。
この時点で "Description" に入力していた値は消えますが、改めて "Normal" をタッチすると、先ほど入力した "Description" と同じ内容が表示されます。