Android 没有这样的表:@DatabseView
我试图在android中创建数据库视图,但出现以下错误: 错误:查询有问题:[SQLITE_error]SQL错误或 缺少数据库(没有这样的表:ChatsView) 公共摘要androidx.lifecycle.LiveData> getMessageViewLIst() 请帮助我了解如何从room persistence android中的DatabaseView中获取数据 数据库视图类 实体类 DaoAccess类 刀Android 没有这样的表:@DatabseView,android,kotlin,android-sqlite,android-room,sqliteopenhelper,Android,Kotlin,Android Sqlite,Android Room,Sqliteopenhelper,我试图在android中创建数据库视图,但出现以下错误: 错误:查询有问题:[SQLITE_error]SQL错误或 缺少数据库(没有这样的表:ChatsView) 公共摘要androidx.lifecycle.LiveData> getMessageViewLIst() 请帮助我了解如何从room persistence android中的DatabaseView中获取数据 数据库视图类 实体类 DaoAccess类 刀 @Dao 界面聊天道{ @插入(onConflict=OnConflic
@Dao
界面聊天道{
@插入(onConflict=OnConflictStrategy.ABORT)
趣味插页列表(聊天:列表)
@插入(onConflict=OnConflictStrategy.ABORT)
在搜索中的乐趣(聊天室:聊天室模型)
@更新
趣味updateMovie(聊天室:聊天室模型)
@查询(“从ChatEntityModel中选择*,其中id=:id_”)
趣味电影(id:Int):聊天室模型
@查询(“从ChatEntityModel中选择*,其中用户名=:Jid ORDER BY id ASC”)
有趣的getChatList(Jid:String?):LiveData
@查询(“更新聊天室模型集状态=2,时间戳\交付=:时间交付,其中msgid=:msg\ id
状态3和用户名=:Jid“)
fun setChatDelivered(timeDelivered:String?,msg_id:String?,Jid:String?)
@查询(“从ChatEntityModel中选择*,其中状态=0按id限制排序1”)
fun getUnsentMessage():列表
@查询(“从ChatEntityModel中选择msgid,其中状态=4,用户名=:用户名按id排序”)
趣味GetUnderMessage(用户名:字符串):列表
@查询(“更新ChatenityModel集合状态=1,其中msgid=:msgid,状态=0”)
fun setMessageSent(msgId:String?)
@查询(“从ChatEntityModel中选择*,其中msgid=:msgid”)
有趣的checkIfExists(msgId:String?):列表
@查询(“更新聊天室模型集状态=3,时间戳\读取=:currentTimeMillis,其中msgid在(:receiptId)中,用户名=:Jid”)
fun setChatRead(currentTimeMillis:String?,receiptId:List,Jid:String?)
@查询(“从ChatEntityModel中选择*,其中状态=4,用户名=:Jid”)
有趣的getUnReadChats(Jid:String?):LiveData
@查询(“在(:chat)中更新ChatEntityModel set status=5,其中status=4和msgid”)
乐趣设置ChatReceiveDread(聊天室:列表)
@查询(“从聊天视图中选择*)
fun getMessageViewLIst():LiveData
}
也许这与您的问题无关,但也许是,有时错误很奇怪。您的视图请求为多个选择不正确的,可能尝试修复您的查询
编辑:为更清楚起见,问题是查询
错误,缺少comas。您需要将数据库名称添加到抽象RoomDatabase类
@Database(entities = [ChatsView::class], version = 1)
abstract class DaoDatabaseAccess:RoomDatabase() {
}
查询很好,我在dao中尝试了相同的查询,但没有使用view,但我想使用DatabaseView执行此操作,当时我得到了一个错误,即不存在这样的表,是否缺少一些逗号?在之后作为lastMsg
和之后作为lastMsgTime
?我已经在我的项目上创建了一个视图,并像您一样将其添加到DAO和数据库中,一切都直接起作用。
@Entity(tableName = "ChatEntityModel")
data class ChatEntityModel (
@ColumnInfo(name = "message") var KEY_MESSAGE: String,
@ColumnInfo(name = "username") var KEY_USERNAME : String,
@ColumnInfo(name = "msgsend") var KEY_MSG_SEND : Boolean,
@ColumnInfo(name = "timeStamp") var KEY_TIMESTAMP :String,
@ColumnInfo(name = "status") var KEY_STATUS :Int,
@ColumnInfo(name = "msgid") var KEY_MSG_ID :String,
@ColumnInfo(name = "timestamp_delivered") var KEY_TIME_DELIVERED :String,
@ColumnInfo(name = "timestamp_read") var KEY_TIME_READ :String,
@ColumnInfo(name = "progress") var KEY_PROGRESS :String,
@ColumnInfo(name = "type") var KEY_TYPE : String
){
@PrimaryKey(autoGenerate = true)@ColumnInfo(name = "id")var KEY_ID:Int=0
}
@Database(entities = [(ChatEntityModel::class)], views = [(ChatsView::class)], version = 1,
exportSchema = false)
abstract class DaoDatabaseAccess:RoomDatabase() {
abstract fun ChattingDao():ChattingDao
// abstract fun ChattViewDao():ChattViewDao
}
@Dao
interface ChattingDao {
@Insert(onConflict = OnConflictStrategy.ABORT)
fun insertChatList(chats: List<ChatEntityModel>)
@Insert(onConflict = OnConflictStrategy.ABORT)
fun inserChat(chats: ChatEntityModel)
@Update
fun updateMovie(chats: ChatEntityModel)
@Query("SELECT * FROM ChatEntityModel WHERE id = :id_")
fun getMovie(id_: Int): ChatEntityModel
@Query("SELECT * FROM ChatEntityModel WHERE username=:Jid ORDER BY id ASC")
fun getChatList(Jid:String?): LiveData<List<ChatEntityModel>>
@Query("Update ChatEntityModel SET status=2 , timestamp_delivered=:timeDelivered WHERE msgid=:msg_id
and status <> 3 and username=:Jid ")
fun setChatDelivered(timeDelivered: String?,msg_id:String?,Jid: String?)
@Query("SELECT * FROM ChatEntityModel WHERE status=0 ORDER BY id LIMIT 1" )
fun getUnsentMessage(): List<ChatEntityModel>
@Query("SELECT msgid FROM ChatEntityModel WHERE status=4 and username=:username ORDER BY id" )
fun getUnReadMessage(username:String): List<String>
@Query("UPDATE ChatEntityModel SET status=1 WHERE msgid= :msgId and status=0")
fun setMessageSent(msgId: String?)
@Query("SELECT * FROM ChatEntityModel WHERE msgid =:msgId")
fun checkIfExists(msgId:String?): List<ChatEntityModel>
@Query("Update ChatEntityModel SET status=3 , timestamp_read=:currentTimeMillis WHERE msgid in (:receiptId) and username=:Jid ")
fun setChatRead(currentTimeMillis: String?, receiptId:List<String>,Jid: String?)
@Query("SELECT * FROM ChatEntityModel WHERE status=4 and username=:Jid ")
fun getUnReadChats(Jid: String?):LiveData<List<ChatEntityModel>>
@Query("UPDATE ChatEntityModel set status=5 WHERE status=4 and msgid in (:chat) ")
fun setChatReceivedRead(chat:List<String>)
@Query("SELECT * FROM ChatsView")
fun getMessageViewLIst(): LiveData<List<ChatsView>>
}
@Database(entities = [ChatsView::class], version = 1)
abstract class DaoDatabaseAccess:RoomDatabase() {
}