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