我使用的是Room,我需要使用SELETC,INSERT,DELETE全部。我需要使用SELETC,INSERT,DELETE所有。
这是我实现的。
@Dao
interface UserDao {
@Query("SELECT * FROM user WHERE m_id IN (:m_id)")
fun loadAllByIds(userSeqs: IntArray?): List<User?>?
@Query("SELECT * FROM user")
val all: List<User?>?
}
@Entity(tableName = "user")
data class User (
@PrimaryKey(autoGenerate = true) val seq: Long,
// this name is used in dao as column name
@ColumnInfo(name = "m_id") val mId: String?,
@ColumnInfo(name = "k_id") var kId: String?,
@ColumnInfo(name = "created_at") var createdAt: String?
)
@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class MyDatabase extends RoomDatabase {
public static final String DB_NAME = "MyDatabase.db";
private static MyDatabase INSTANCE;
public abstract UserDao userDao();
public static MyDatabase getMyDatabase(Context context) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context, MyDatabase.class, DB_NAME).build();
}
return INSTANCE;
}
public static void destroyInstance() {
INSTANCE = null;
}
}
@Query("SELECT * FROM deliver")
我是这样实现的:
这不适用于目标 "无支持字段或委托的成员属性"。
@get:Query("SELECT * FROM deliver")
让它消失。但是,我不知道为什么会这样。它能解决这个问题吗?它的作用是什么?
列表中的 @Query
注解要放在一个方法上。kotlin属性有点像 "一个字段+getter方法+setter方法",但它本身不是一个字段或方法。当你通过 @get:Query
,你基本上是告诉编译器把这个注解放在属性的getter方法上,这样就能让整个事情顺利进行。
我也有同样的问题,我通过检查我的导入,找出了一个解决方案。
我使用的是 retrofit 和 Room,我错误地导入了 retrofit。@Query
版本而不是房间。请检查您的导入。