'Android Room @Delete with parameters
I know I can't use DELETE in a query (that is a shame by the way), I will get the following error:
<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>
But I can't use @Delete(WHERE... xxx)
So how do I delete a specific row by a parameter?
Solution 1:[1]
Actually, you can use @Query to perform a delete.
@Query("DELETE FROM users WHERE user_id = :userId")
abstract void deleteByUserId(long userId);
Extracted from Query javadoc:
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.
Solution 2:[2]
You can use below method to delete by ID
@Query("DELETE FROM yourDatabaseTable WHERE id = :id")
void deleteById(int id);
for delete all rows
@Query("DELETE FROM yourDatabaseTable")
void delete();
Solution 3:[3]
ROOM database provides easy way to INSERT, UPDATE and DELETE an object in the database. To perform thus operation just needed to annotate @Delete. The DELETE operation returns the Int when deletion of the single object is successful returns 1 else returns 0 if the DELETE operation is unsuccessful, Adding the return type is a good practice.
KotlinEG.kt
@Dao
interface EntityLocalDAO {
@Delete
fun deleteData(entityObject: EntityObject) : Int
}
javaEG.java
@Dao
interface EntityLocalDAO {
@Delete
int deleteData(EntityObject entityObject);
}
Solution 4:[4]
You can now delete using only partial data.
Per the 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)
}
In this example you can see that they are deleting the Playlist using only the ownerId and the category. You do not even need to use the primary key (playlistId).
The key is to use the @Delete(entity = Playlist::class) annotation.
Solution 5:[5]
I faced the same issue using node v17.2.0 in Webstorm. The downgrade to v16.13.1 fixed the issue.
Angular: 13.1.0
Solution 6:[6]
You should try the latest launch.json and tasks.json file examples from VSCode Debug Recipes page:
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | frogatto |
| Solution 2 | Ehsan Shadi |
| Solution 3 | Rohit S |
| Solution 4 | Randy |
| Solution 5 | Ninroot |
| Solution 6 |
