表名包含特殊字符,需要用 SQLite 和 ROOM 都可以接受的字符括起来。
在 SQLITE 中,您可以使用以下之一:-
`tablename`
"tablename"
'tablename'
[tablename]
但是 ROOM 比较麻烦,因为它不允许您使用中间的两个。因此尝试:-
@Query("SELECT * FROM `${Test.TABLE_NAME}` WHERE primary_key = :primaryKey LIMIT 1")
fun selectTest(primaryKey: String): Test?
或
@Query("SELECT * FROM [${Test.TABLE_NAME}] WHERE primary_key = :primaryKey LIMIT 1")
fun selectTest(primaryKey: String): Test?
测试
- 请注意,以上是原理代码,未经测试或运行,因此可能包含小错误。但是,为了方便起见,已通过改编另一个问题的答案中的代码来测试等效的 java 代码。
使用:-
@Query("SELECT * FROM `/cards` WHERE card_name LIKE :cardName")
Cards[] getCardsByName(String cardName);
@Query("SELECT * FROM [" + GamesDatabase.TABLENAMECARDS +"] WHERE card_name LIKE :cardName")
Cards[] getFunnyCardsByName(String cardName);
-
GamesDatabase.TABLENAMECARDS 是相同的表名,但作为 CONSTANT 即 /cards
上面的 Dao 使用了 :-
String cardToGet = "%/";
Cards[] retrievedCards = mGamesDao.getCardsByName(cardToGet);
for (Cards c: retrievedCards) {
logCardsInfo(c,"GETCARDSBYNAME");
}
retrievedCards = mGamesDao.getFunnyCardsByName(cardToGet);
for (Cards c: retrievedCards) {
logCardsInfo(c,"GETCARDSBYFUNNYNAME");
}
logCardsInfo 方法将 Card、名称、值、id、Folder 和 Category 写入日志,TAG 是传递的第二个参数。
其中 Cards 包含一包卡片(带有一个名为 ooops 的额外花色,不是花色等同于类别,文件夹每个类别有两个,但 7 在 normalcards 文件夹中)但卡片的名称值为 7是 7/ 而不是 7,因此两者都将提取 5 张卡片:-
2019-09-16 15:01:46.084 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYNAME: Card Name is 7/
Value is 7
CardID is 10
In Folder NormalCards
In Category Spades
2019-09-16 15:01:46.089 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYNAME: Card Name is 7/
Value is 7
CardID is 23
In Folder NormalCards
In Category Hearts
2019-09-16 15:01:46.094 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYNAME: Card Name is 7/
Value is 7
CardID is 36
In Folder NormalCards
In Category Clubs
2019-09-16 15:01:46.101 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYNAME: Card Name is 7/
Value is 7
CardID is 49
In Folder NormalCards
In Category Diamonds
2019-09-16 15:01:46.107 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYNAME: Card Name is 7/
Value is 7
CardID is 62
In Folder NormalCards
In Category ooops
2019-09-16 15:01:46.110 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYFUNNYNAME: Card Name is 7/
Value is 7
CardID is 10
In Folder NormalCards
In Category Spades
2019-09-16 15:01:46.114 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYFUNNYNAME: Card Name is 7/
Value is 7
CardID is 23
In Folder NormalCards
In Category Hearts
2019-09-16 15:01:46.118 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYFUNNYNAME: Card Name is 7/
Value is 7
CardID is 36
In Folder NormalCards
In Category Clubs
2019-09-16 15:01:46.121 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYFUNNYNAME: Card Name is 7/
Value is 7
CardID is 49
In Folder NormalCards
In Category Diamonds
2019-09-16 15:01:46.122 19140-19140/aso.so57943963foreignkeys D/GETCARDSBYFUNNYNAME: Card Name is 7/
Value is 7
CardID is 62
In Folder NormalCards
In Category ooops