Android 带参数的房间@Delete
Android Room @Delete with parameters
我知道我不能在查询中使用 DELETE
(顺便说一句,这很遗憾),我会得到以下错误:
<i>Error:error: Observable query return type (LiveData, Flowable etc) can only be used with SELECT queries that directly or indirectly (via @Relation, for example) access at least one table.</i>
但是我不会用@Delete(WHERE... xxx)
那么如何通过参数删除特定行呢?
实际上,您可以使用 @Query
执行删除。
@Query("DELETE FROM users WHERE user_id = :userId")
abstract void deleteByUserId(long userId);
UPDATE or DELETE queries can return void or int. If it is an int, the
value is the number of rows affected by this query.
房间的美妙之处在于,我们可以玩弄物品。根据要求,您可以使用
对于科特林:
@Delete
fun delete(model: LanguageModel)
对于 Java:
@Delete
void delete(LanguageModel model)
它将删除存储在数据库中具有相同值的确切对象。 LanguageModel 是我的模型 class,它工作得很好。
您可以使用以下方法通过ID删除
@Query("DELETE FROM yourDatabaseTable WHERE id = :id")
void deleteById(int id);
用于删除所有行
@Query("DELETE FROM yourDatabaseTable")
void delete();
ROOM 数据库提供了在数据库中插入、更新和删除对象的简便方法。要执行这样的操作,只需要注释@Delete。 DELETE操作 returns Int 删除单个对象成功时 returns 1 else returns 0 如果DELETE操作不成功, 添加 return 类型是一个很好的做法。
KotlinEG.kt
@Dao
interface EntityLocalDAO {
@Delete
fun deleteData(entityObject: EntityObject) : Int
}
javaEG.java
@Dao
interface EntityLocalDAO {
@Delete
int deleteData(EntityObject entityObject);
}
您现在可以仅使用部分数据进行删除。
根据 documentation:
@Entity
data class Playlist (
@PrimaryKey
val playlistId: Long,
val ownerId: Long,
val name: String,
@ColumnInfo(defaultValue = "normal")
val category: String
)
data class OwnerIdAndCategory (
val ownerId: Long,
val category: String
)
@Dao
public interface PlaylistDao {
@Delete(entity = Playlist::class)
fun deleteByOwnerIdAndCategory(varargs idCategory: OwnerIdAndCategory)
}
在此示例中,您可以看到他们正在删除仅使用 ownerId 和类别的播放列表。您甚至不需要使用主键 (playlistId)。
关键是使用@Delete(entity = Playlist::class)注解。
我知道我不能在查询中使用 DELETE
(顺便说一句,这很遗憾),我会得到以下错误:
<i>Error:error: Observable query return type (LiveData, Flowable etc) can only be used with SELECT queries that directly or indirectly (via @Relation, for example) access at least one table.</i>
但是我不会用@Delete(WHERE... xxx)
那么如何通过参数删除特定行呢?
实际上,您可以使用 @Query
执行删除。
@Query("DELETE FROM users WHERE user_id = :userId")
abstract void deleteByUserId(long userId);
UPDATE or DELETE queries can return void or int. If it is an int, the value is the number of rows affected by this query.
房间的美妙之处在于,我们可以玩弄物品。根据要求,您可以使用 对于科特林:
@Delete
fun delete(model: LanguageModel)
对于 Java:
@Delete
void delete(LanguageModel model)
它将删除存储在数据库中具有相同值的确切对象。 LanguageModel 是我的模型 class,它工作得很好。
您可以使用以下方法通过ID删除
@Query("DELETE FROM yourDatabaseTable WHERE id = :id")
void deleteById(int id);
用于删除所有行
@Query("DELETE FROM yourDatabaseTable")
void delete();
ROOM 数据库提供了在数据库中插入、更新和删除对象的简便方法。要执行这样的操作,只需要注释@Delete。 DELETE操作 returns Int 删除单个对象成功时 returns 1 else returns 0 如果DELETE操作不成功, 添加 return 类型是一个很好的做法。
KotlinEG.kt
@Dao
interface EntityLocalDAO {
@Delete
fun deleteData(entityObject: EntityObject) : Int
}
javaEG.java
@Dao
interface EntityLocalDAO {
@Delete
int deleteData(EntityObject entityObject);
}
您现在可以仅使用部分数据进行删除。
根据 documentation:
@Entity
data class Playlist (
@PrimaryKey
val playlistId: Long,
val ownerId: Long,
val name: String,
@ColumnInfo(defaultValue = "normal")
val category: String
)
data class OwnerIdAndCategory (
val ownerId: Long,
val category: String
)
@Dao
public interface PlaylistDao {
@Delete(entity = Playlist::class)
fun deleteByOwnerIdAndCategory(varargs idCategory: OwnerIdAndCategory)
}
在此示例中,您可以看到他们正在删除仅使用 ownerId 和类别的播放列表。您甚至不需要使用主键 (playlistId)。
关键是使用@Delete(entity = Playlist::class)注解。