使用 -Android Sqlite Room ORM 传递带有参数的 TableName 时出错

Getting Error when Passing the TableName with Parameters using -Android Sqlite Room ORM

1.when 尝试使用方法以 tablename 作为参数访问数据,在 android.

中使用 Room Library 出现下面提到的错误

-->查询有问题:ERROR] SQL错误或缺少数据库(没有这样的table:table名称)

MainActivity.class

userData1= userSampleDatabase.daoAccessForUser().getItembyIdvalue("UserData","1");

DaoAccessForUser.class

 @Query("select * from 'tableName' where id = :id")
 List<UserData> getItembyIdvalue(String tableName,String id);

提前致谢。

房间不支持 table 名称的动态替换。

在您的 DAO 中,将 'tableName' 替换为实际的 table 名称,如关联的 @Entity 中所定义。或者,use @RawQuery 而不是 @Query 并在运行时提供整个 SQL SELECT 语句。

编译时出现这个错误是有原因的; Room 编译 时检查查询以确保您的应用程序不会 运行 在 [=34= 时出现问题]时间..

房间所知,您的table中可能根本没有id!为防止您的应用遇到此类问题,房间要求您事先提供 table 姓名。如果此功能对您的项目至关重要,请尝试将 ORMsQuery Builder 一起使用,例如 greenDAOdbflow

希望您了解 Room 行为 ^^

正如 CommonsWare 建议的那样,您可以使用 @RawQuery 在你DaoAccessForUser.class

@RawQuery
 List<UserData> getUserDataList(String query);

你可以这样称呼它

String tablename="UserData";
String id="1";
    userData1= userSampleDatabase.daoAccessForUser().getUserDataList("select * from "+tablename+" where id = " + id);