package com.example.firstapp
|
|
import android.content.Context
|
import androidx.room.Database
|
import androidx.room.Room
|
import androidx.room.RoomDatabase
|
import androidx.room.TypeConverters
|
import androidx.room.migration.Migration
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
import com.example.firstapp.database.dao.CodeDao
|
import com.example.firstapp.database.dao.MsgDao
|
import com.example.firstapp.database.entity.Code
|
import com.example.firstapp.database.entity.Msg
|
import com.example.firstapp.utils.DATABASE_NAME
|
import com.example.firstapp.utils.SettingUtils
|
import com.example.firstapp.utils.TAG_LIST
|
|
import com.example.firstapp.database.ext.ConvertersDate
|
|
|
|
@Database(
|
entities = [ Msg::class, Code::class],
|
// views = [LogsDetail::class],
|
version = 19,
|
exportSchema = false
|
)
|
@TypeConverters(ConvertersDate::class)
|
abstract class AppDatabase : RoomDatabase() {
|
abstract fun msgDao(): MsgDao
|
abstract fun codeDao(): CodeDao
|
|
companion object {
|
@Volatile
|
private var instance: AppDatabase? = null
|
|
fun getInstance(context: Context): AppDatabase {
|
return instance ?: synchronized(this) {
|
instance ?: buildDatabase(context).also { instance = it }
|
}
|
}
|
|
private fun buildDatabase(context: Context): AppDatabase {
|
val builder = Room.databaseBuilder(
|
context.applicationContext, AppDatabase::class.java, DATABASE_NAME
|
).allowMainThreadQueries() //TODO:允许主线程访问,后面再优化
|
.addCallback(object : Callback() {
|
override fun onCreate(db: SupportSQLiteDatabase) {
|
|
}
|
}).addMigrations(
|
|
MIGRATION_MSG,
|
)
|
|
/*if (BuildConfig.DEBUG) {
|
builder.setQueryCallback({ sqlQuery, bindArgs ->
|
println("SQL_QUERY: $sqlQuery\nBIND_ARGS: $bindArgs")
|
}, Executors.newSingleThreadExecutor())
|
}*/
|
|
return builder.build()
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private val MIGRATION_MSG = object : Migration(19, 20) {
|
override fun migrate(database: SupportSQLiteDatabase) {
|
//database.execSQL("Create table Msg as Select id,type,`from`,content,(case when sim_info like 'SIM1%' then '0' when sim_info like 'SIM2%' then '1' else '-1' end) as sim_slot,sim_info,sub_id,time from Logs where 1 = 1")
|
database.execSQL(
|
"""
|
CREATE TABLE "Msg" (
|
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
"type" TEXT NOT NULL DEFAULT 'sms',
|
"from" TEXT NOT NULL DEFAULT '',
|
"content" TEXT NOT NULL DEFAULT '',
|
"sim_slot" INTEGER NOT NULL DEFAULT -1,
|
"sim_info" TEXT NOT NULL DEFAULT '',
|
"sub_id" INTEGER NOT NULL DEFAULT 0,
|
"time" INTEGER NOT NULL
|
)
|
""".trimIndent()
|
)
|
|
database.execSQL("CREATE UNIQUE INDEX \"index_Msg_id\" ON \"Msg\" ( \"id\" ASC)")
|
|
}
|
}
|
|
}
|
|
}
|