0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kotlinを用いてAndroid上のデータベースをInsertする

Last updated at Posted at 2017-08-03

#概要
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から変換して触っていない為、改良の余地があるかもしれません。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?