是否可以通过将表名称作为参数来获取数据
? 就像这样。
@Query("SELECT id, name from :tableName")
fun getData(tableName: String): List<RandomModel>
是否可以通过将表名称作为参数来获取数据
? 就像这样。
@Query("SELECT id, name from :tableName")
fun getData(tableName: String): List<RandomModel>
试试这个
@Dao
interface RawDao {
@RawQuery
List<RandomModel> getData(SupportSQLiteQuery query);
}
SimpleSQLiteQuery query = new SimpleSQLiteQuery("SELECT * FROM "+ tablename);
List<RandomModel> models = rawDao.getUserViaQuery(query);
Room
不支持动态tableName
。DAO
中,我们可以将tableName
替换为模型@Entity
上定义的实际表名。@RawQuery
:@Dao
interface RawDao {
@RawQuery
User getUserViaQuery(SupportSQLiteQuery query);
}
SimpleSQLiteQuery query = new SimpleSQLiteQuery("SELECT * FROM User WHERE id = ? LIMIT 1",
new Object[]{userId});
User user2 = rawDao.getUserViaQuery(query);
您可以在此处学习更多: this
首先在您的Dao中创建一个@RawQuery。只需使用您感兴趣的要监视的表/类,例如Class1、Class2等。
@RawQuery( observedEntities = [Class1::class, CLass2::class] )
fun query(query:SupportSqliteQuery): List<RandomModel>
只需使用必要的输入参数创建一个SimpleSqliteQuery即可。
请注意,Dao中使用的“SupportSqlite…”与doQuery()函数中使用的“SimpleSqlite…”之间存在差异。
fun doQuery(tableName:String):List<RandomModel> {
//note $ sign in front of tableName instead of : sign
val simpleSqliteQuery = SimpleSqliteQuery("SELECT id, name from $tableName")
return dao().query( simpleSqliteQuery )
}