[英]How to get specific value from room database by id?
I have a simple room database with LiveData, i want to get (cartPriceI: Double) values by id to use it within specific methods.我有一个带有 LiveData 的简单房间数据库,我想通过 id 获取 (cartPriceI: Double) 值以在特定方法中使用它。
CartItemsDatabase.kt购物车商品数据库.kt
@Parcelize
@Entity(tableName = "cart_table")
data class CartItemsDatabase(
@PrimaryKey(autoGenerate = true) var cid: Int,
@ColumnInfo(name = "titleD") var cartTitle: String?,
@ColumnInfo(name = "imageD") var cartImage: Bitmap?,
@ColumnInfo(name = "priceLD") var cartPriceL: Double?,
@ColumnInfo(name = "priceID") var cartPriceI: Double?,
@ColumnInfo(name = "itemNumD") var cartNum: Int?,
@ColumnInfo(name = "descriptionD") var cartDes: String?): Parcelable
CartItemsDAO.kt购物车商品DAO.kt
@Dao
interface CartItemsDAO {
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun addItem(cartItemsDatabase: CartItemsDatabase)
@Update
suspend fun updateCart(cartItemsDatabase: CartItemsDatabase)
@Query("SELECT * FROM cart_table ORDER BY cid ASC")
fun readAllData(): LiveData<List<CartItemsDatabase>>
@Delete
fun delete(cartItems: CartItemsDatabase)
}
CartRepository.kt CartRepository.kt
class CartRepository(private val cartItemsDAO: CartItemsDAO) {
val readAllData: LiveData<List<CartItemsDatabase>> = cartItemsDAO.readAllData()
suspend fun addItem(cartItemsDatabase: CartItemsDatabase){
cartItemsDAO.addItem(cartItemsDatabase)
}
suspend fun updateCart(cartItemsDatabase: CartItemsDatabase){
cartItemsDAO.updateCart(cartItemsDatabase)
}
}
CartViewModel.kt CartViewModel.kt
class CartViewModel(application: Application): AndroidViewModel(application) {
val readAllData: LiveData<List<CartItemsDatabase>>
private val repository: CartRepository
init {
val cartDao = AppDatabase.getDatabase(application).cartDao()
repository = CartRepository(cartDao)
readAllData = repository.readAllData
}
fun addItem(cartItemsDatabase: CartItemsDatabase){
viewModelScope.launch(Dispatchers.IO){
repository.addItem(cartItemsDatabase)
}
}
fun updateCart(cartItemsDatabase: CartItemsDatabase){
viewModelScope.launch(Dispatchers.IO) {
repository.updateCart(cartItemsDatabase)
}
}
}
AppDatabase.kt AppDatabase.kt
@Database(entities = [CartItemsDatabase::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun cartDao(): CartItemsDAO
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
fun getDatabase(context: Context): AppDatabase {
// if the INSTANCE is not null, then return it,
// if it is, then create the database
val tempInstance = INSTANCE
if (tempInstance != null){
return tempInstance
}
synchronized(this){
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"cart_database"
).build()
INSTANCE = instance
return instance
}
}
private fun buildDatabase(context: Context): AppDatabase {
return Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"cartItems_database"
)
.build()
}
}
}
I'm a beginner, i want to know if there is possible way to do that and retrieve specific values from database (ex. cartPriceI in Double) by id!我是初学者,我想知道是否有可能通过 id 从数据库(例如 Double 中的 cartPriceI)中检索特定值!
You can query the database by the given id
and return it asynchronously either with a suspend fun or LiveData/Flow您可以通过给定的id
查询数据库并使用 suspend fun 或 LiveData/Flow 异步返回它
In the CartItemsDAO
:在CartItemsDAO
:
@Query("SELECT cartPriceI FROM cart_table WHERE cid = :id")
suspend fun getPrice(id: Int): Double
@Query("SELECT cartPriceI FROM cart_table WHERE cid = :id")
fun getPrice(id: Int): LiveData<Double>
You can get a specific model by SELECT
with WHERE
statement你可以通过WHERE
语句通过SELECT
得到一个特定的 model
@Query("SELECT * FROM cart_table WHERE cid == : cid")
fun getCartItemsDatabase(cid: String): LiveData<CartItemsDatabase?>
Or you can Return a subset of a table's columns或者您可以返回表列的子集
@Query("SELECT priceID FROM cart_table WHERE cid == : cid")
fun getCartItemPrice(cid: String): LiveData<Double>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.