🗄️
AndroidのSQLite実装
Androidのデータベース作成について
SQLiteを使ってデータベースを作成する
- 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);
}
}
}
- 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
}
}
- 呼び出して使用
/// DB使用クラス内
private val dbManager by lazy { DataBaseManager(this.applicationContext) }
おしまい
Discussion