🗄️

AndroidのSQLite実装

2023/01/22に公開

Androidのデータベース作成について

SQLiteを使ってデータベースを作成する

  1. SQLiteOpenHelperを継承したクラスの作成
class DbHelper(context: Context, val DATABASE_NAME: String, val DATABASE_VERSION: Int, val DATATABLE_NAME: String ) : SQLiteOpenHelper (
        context,
        DATABASE_NAME,
        null,
        DATABASE_VERSION
    ){
        // キー
        companion object {
            const val Name = "name"
            const val Type = "data_type"
        }


        val create_Table = "CREATE TABLE "+DATATABLE_NAME+" ("+
            BaseColumns._ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"+  //-- 主キーとなるID(INTEGER型)
        /* 主キーによってレコード(=行)が特定できる */
            Name + " TEXT,"+  //-- -- カラム①(TEXT型)
            Type + " INTEGER"+  //-- -- カラム②(TEXT型)
        ");"

        // DB作成処理
        override fun onCreate(db: SQLiteDatabase?) {
            try {
                db?.execSQL(create_YRCData_Table)
            } catch (ex: java.lang.Exception) {
                Log.e("YrcInfoDataDbHelper", ex.toString())
            }
        }

        // DBアップデート処理
        override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
            // アップデートの判別、古いバージョンは削除して新規作成
            if(db != null){
                db.execSQL( SQL_DELETE_ENTRIES );
                onCreate(db);
            }
        }
}
  1. Helperクラスを管理するクラスの作成
class DataBaseManager(val context: Context) {
    val DATABASE_NAME = "DataBase.db"

    val DATATABLE_NAME = "Table"

    // 生成時のDBバージョン番号
    val DATABASE_VERSION = 1

    private val _helper = DbHelper(context, DATABASE_NAME, DATABASE_VERSION,DATATABLE_NAME)

    /**
     * クローズ処理
     */
    fun closeConnect() {
        try {
            _helper.close()
        } catch (exception: Exception) {

        }
    }

    /**
     * データ追加処理
     */
    fun addData(data: Data): Int {
        val id = -1
        try {
            val db = _helper.writableDatabase
            val values = ContentValues()
            values.put(DbHelper.Name, data.name)
            values.put(DbHelper.Type, data.type)

            id = db.insertOrThrow(DATATABLE_NAME, null, values)
        }
        catch(e: Exception) {
            
        }
        if(id != -1) {
            data.id = id.toInt()
            updateData(data)
        }
        return id
    }

    /**
     * 指定IDデータ削除処理
     */
    fun deleteData(vararg id: Int): Boolean {
        try {
            val db = _helper.writableDatabase
            val whereClauses = BaseColumns._ID +" = ?"
            val whereArgs = id.map { it.toString() }.toTypedArray()
            dbb.delete(DATATABLE_NAME, whereClauses, whereArgs)
            return true
        }
        catch(e: Exception) {
            return false
        }
    }

    /**
     * データ更新処理
     */
     fun updateData(data: Data): Boolean {
        try {
            val db = _helper.writableDatabase
            val values = ContentValues()
            values.put(DbHelper.Name, data.name)
            values.put(DbHelper.Type, data.type)
            val whereClauses = BaseColumns._ID +" = ?"
            val whereArgs = arrayOf(data.mId.toString())
            val result = database.update(DATATABLE_NAME, values, whereClauses, whereArgs)
            if(result != 0) {
                return true
            }
        }
        catch(e: Exception) {
            return false
        }
    }

    /**
     * 指定IDデータ取得処理
     */
    fun getData(id: Int): Data? {
        var data: Data? = null
        val db = _helper.writableDatabase
        // データを取得するSQL文
        val sql = "SELECT * FROM ${DATATABLE_NAME}  WHERE ${BaseColumns._ID} = ${id}"
        // SQL文(SELECT文)の実行結果表を格納するCursorオブジェクト
        val cursor = dbb.rawQuery(sql, null)
        if(cursor.count > 0) {
            cursor.moveToFirst()
            data = Data()
            data.id = cursor.getInt(0)
            data.name = cursor.getString(1)
            data.type = cursor.getInt(2)
        }
        return data
    }

    /**
     * 全データ取得処理
     */
    fun getAllData(): MutableList<Data> {
        val db = _helper.writableDatabase
        val allData: MutableList<Data> = mutableListOf()
         // データを取得するSQL文
        val sql = "SELECT * FROM ${DATATABLE_NAME}
        // SQL文(SELECT文)の実行結果表を格納するCursorオブジェクト
        val cursor = dbb.rawQuery(sql, null)
        if(cursor.count > 0) {
            cursor.moveToFirst()
            while(!cursor.isAfterLast()) {
                val data = Data()
                data.id = cursor.getInt(0)
                data.name = cursor.getString(1)
                data.type = cursor.getInt(2)
                allData.add(data)
                cursor.moveToNext()
            }
        }
        return allData
    }
}
  1. 呼び出して使用
/// DB使用クラス内
private val dbManager by lazy { DataBaseManager(this.applicationContext) }

おしまい

Discussion