Android(kotlin) データベースヘルパークラスをつくる
SQLite をつかいたい
Android アプリケーションで手軽に使えるデータベースとして、SQLite がある。
SQLite の利用手順はおおまかに以下のようになっている。
1. データベースヘルパークラスを作成
2. アクティビティから、データベース接続オブジェクトを生成する
3. データベース接続オブジェクトから、SQLを実行する
編集するファイル
以下の記事で作成したプロジェクトを引き続き編集します。
blueskyarea.hatenablog.com
- DatabaseHelper.kt (新規作成)
- MainActivity.kt
DatabaseHelper クラスをつくる
新しくクラスファイルを作成していきます。
class DatabaseHelper(context: Context): SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) { // To declare private variable companion object { // Name of database file private const val DATABASE_NAME = "level.db" // Version of database private const val DATABASE_VERSION = 1 } override fun onCreate(db: SQLiteDatabase) { Log.i("DatabaseHelper", "Called onCreate()") // SQL statement to create table val sb = StringBuilder() sb.append("CREATE TABLE levels (") sb.append("_id INTEGER PRIMARY KEY,") sb.append("name TEXT,") sb.append("description TEXT") sb.append(");") // Execute the SQL db.execSQL(sb.toString()) Log.i("DatabaseHelper", "Created table.") } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { Log.i("DatabaseHelper", "Called onUpgrade()") } }
メモ
companion object
> クラス内に作成されるSingletonのこと。objectキーワードの前にcompanion修飾子を付与することで、クラスに属するSingletonが作成される。
android.util.Log
> ログレベルによって、関数が用意されている。Log.i や Log.e など。
DatabaseHelper オブジェクトの生成と解放処理
class MainActivity : AppCompatActivity() { private var levelId = -1 private var levelName = "" // Create dbHelper object private var dbHelper = DatabaseHelper(this@MainActivity) override fun onCreate(savedInstanceState: Bundle?) { Log.i("MainActivity", "Called onCreate()") super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Find ListView for Level list val lvLevel = findViewById<ListView>(lvLevel) // Register the ListView to listener lvLevel.onItemClickListener = ListItemClickListener() } override fun onDestroy() { Log.i("MainActivity", "Called onDestroy()") // Release dbHelper object dbHelper.close() super.onDestroy() } --- (省略) ---
メモ
private var dbHelper = DatabaseHelper(this@MainActivity)
> this@MainActivity で MainActivity のコンテキストを渡している