#概要
KotlinがAndroidで公式に対応したとのことで、今後の学習も兼ねて、今更ながらに一部の部品を見直しました。
私自身の為の備忘録を兼ねているため、文章を含めてベストプラクティスではないかもしれません。
#データベース操作
##データ構造
今回はテスト用として
Name | Type | Primary |
---|---|---|
id | Integer | 〇 |
category_id | Integer | × |
name | Text | × |
というデータを使用していきます。今回はcategoryテーブルについては省略します。 | ||
##BuilderによるデータベースInsert文 | ||
Builderパターンを用いてデータベースを構築していきます。 | ||
以下ModelとBuilderの処理です。 |
DatabaseModel.kt
//
class DatabaseModel(private var categoryId: Int, private var name: MutableList<String>) {
fun getName(): MutableList<String> {
return name
}
fun setName(mName: MutableList<String>) {
this.name = mName
}
fun getCategoryId(): Int {
return categoryId
}
fun setCategoryId(catId: Int) {
this.categoryId = catId
}
}
どうやらコンストラクタから直接参照できるらしいですが、データ構造が把握しにくいため、フィールドはちゃんと宣言しておいた方がいいかもしれません。
DatabaseBuilder.kt
class DatabaseBuilder {
private var listData: MutableList<DBModel>
init {
this.createArrayData()
listData = mutableListOf()
}
fun create(categoryId:Int, vararg name: String) {
listData.add(DatabaseModel(categoryId, mutableListOf(*name)))
}
fun createArrayData() {
this.create(1,"犬", "いぬ")
this.create(2,"猫", "ねこ")
this.create(3,"猿", "さる")
this.create(4,"馬", "うま")
}
fun getData() : MutableList<DBModel>{
return listData
}
}
Kotlinでは、可変長引数は_vararg_で定義します。そこからListに変換するには_mutableListOf(*変数名)_にて変換ができます。
DatabaseFactory.kt
class DatabaseFactory(mContext: Context) : SQLiteOpenHelper(mContext, DATABASE_NAME, null, DB_VERSION) {
var builder: DatabaseBuilder
init {
builder = DatabaseBuilder()
}
//Insert処理
override fun onCreate(db: SQLiteDatabase) {
val dbData = builder.getData()
var id = 0
try {
db.execSQL(SQL)
for (datum in dbData) {
val categoryId = datum.getCategoryId().toString()
for (name in datum.getName()) {
//CREATE TABLE IF NOT EXISTS data(id integer,category_id integer, name text, primary key(id));
val sql = INSERT_SQL
id++
db.execSQL(sql, arrayOf(id,categoryId, name))
}
}
} catch (ex: SQLiteException) {
Log.d(TAG, "SQLite execution failed:" + ex.localizedMessage)
}
}
データベース登録処理。Javaから変換して触っていない為、改良の余地があるかもしれません。