Kotlin + Android + SQLiteでDBに値を挿入する

こちらの記事を参考しました。
https://qiita.com/NaoSekig/items/0d95d631378040c1961a#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0

下準備

DB操作のために下記のクラスを作成します。

package com.example.myfavoritecontentsmanage

import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper

public class SampleDBHelper(
    context: Context,
    databaseName: String,
    factory: SQLiteDatabase.CursorFactory?,
    version: Int
) : SQLiteOpenHelper(context, databaseName, factory, version) {

    override fun onCreate(database: SQLiteDatabase?) {
        database?.execSQL("create table if not exists SampleTable (id text primary key, name text)");
    }

    override fun onUpgrade(database: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        if (oldVersion < newVersion) {
            database?.execSQL("alter table SampleTable add column deleteFlag integer default 0")
        }
    }
}

これで、IDと名前だけ格納できるテーブルができます。

データの挿入

package com.example.myfavoritecontentsmanage

import android.content.ContentValues
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import androidx.fragment.app.Fragment
import com.example.myfavoritecontentsmanage.databinding.FragmentCreateBinding
import java.util.*

class CreateFragment : Fragment() {
    private lateinit var binding: FragmentCreateBinding
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentCreateBinding.inflate(inflater, container, false)
        inflater.inflate(R.layout.fragment_create, container, false)

        ArrayAdapter.createFromResource(
            requireContext(),
            R.array.categories_array,
            R.layout.spinner_item
        ).also { adapter ->
            // Specify the layout to use when the list of choices appears
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
            // Apply the adapter to the spinner
            binding.category.adapter = adapter
        }
        binding.save.setOnClickListener { v ->
            // データの挿入処理
            val dbHelper = SampleDBHelper(requireContext(), "SampleDB", null, 1);
            val database = dbHelper.writableDatabase
            val values = ContentValues()
            values.put("id", UUID.randomUUID().toString())
            values.put("name", "サンプル")
            database.insertOrThrow("SampleTable", null, values)

            // データの確認処理
            val databaseR = dbHelper.readableDatabase
            val sql =
                "select id, name from " + "SampleTable"
            val cursor = databaseR.rawQuery(sql, null)
            if (cursor.count > 0) {
                cursor.moveToFirst()
                var s = cursor.getString(1)
                println(s)
            }
            println(cursor)
        }
        return binding.root
    }

}

めちゃくちゃざっくりですが、// データの挿入処理がデータの挿入処理で、その後の処理は値確認用のデバッグコードです。

(SQLiteの中身を見る方法を調べたのですが、ちょっと面倒だったので、selectして値を確認することにしました.....)


SNSでシェア

関連記事