我的实体
@Entity(tableName = "user_table")
data class User(
val userID:String,
val userName:String,
val userRoleName:String,
val adminID:String,
val name:String,
val email:String,
val phoneNumber:String,
val adminType:String,
val batchID:String,
val centerID:String,
val batchName:String,
val centerName:String
) {
@PrimaryKey(autoGenerate = true)
var id: Int = 0
}
我的道
@Dao
abstract class MDao {
@Insert
abstract suspend fun insert(user: User)
@Query("select userID from user_table")
abstract suspend fun getuserID():String
@Query("select adminID from user_table")
abstract suspend fun getadminID():String
@Delete
abstract suspend fun deleteUser(user: User)
@Query("delete from user_table")
abstract fun deleteUserTable()
@Query("select count(*) from user_table")
abstract suspend fun getUserTableCount() : Int
@Transaction
open suspend fun insertUser(user: User){
deleteUserTable()
insertUser(user)
}
}
我正在使用协程来使用这些功能,如果我调用delete并一个接一个地插入,则代码运行平稳。
val dao :MDao = mDatabase(it).getDao()
dao.deleteUserTable()
dao.insert(user)
但是如果我致电交易,则会出现错误:
val dao :MDao = mDatabase(it).getDao()
dao.insertUser(user)
错误:
java.lang.StackOverflowError: stack size 1042KB
at kotlinx.coroutines.Job$DefaultImpls.get(Unknown Source:8)
at kotlinx.coroutines.JobSupport.get(JobSupport.kt:27).....
有时我还会收到一条错误消息,指出数据库是只读的。