Ezz*_*zzy 5 sqlite android android-room
我有一张看起来像下面的表格
@Entity
@JsonIgnoreProperties(ignoreUnknown = true)
public class Product
{
@PrimaryKey
@ColumnInfo(name = "ID")
@JsonProperty("ID")
public int id;
@ColumnInfo(name = "Name")
@JsonProperty("Name")
public String name;
@ColumnInfo(name = "Documents")
@JsonProperty("Documents")
@TypeConverters(DocumentConverter.class)
public List<Document> documents;
}
Run Code Online (Sandbox Code Playgroud)
//...
@TypeConverters(DocumentConverter.class)
@JsonIgnoreProperties( ignoreUnknown = true )
@JsonTypeName("Documents")
public class Document
{
@JsonProperty("Name")
public String name;
@JsonProperty("URL")
public String url;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过执行这样的操作来根据名称检索产品
@Query("SELECT * FROM Product WHERE Name = :name")
List<Product> getProducts(String name);
Run Code Online (Sandbox Code Playgroud)
然后我就可以从每个 Product 对象访问文档列表。但是,我也想只处理具有某些文件的产品。我可以通过上面的查询获取所有产品,然后手动过滤我想要的文档,但是当我只查找非常具体的文档时会变得非常痛苦。
是否也可以基于 Document 变量进行查询而不是单独的表?
就像是...
@Query("SELECT * FROM Product WHERE Name = :name AND Document.name = :documentName")
List<Product> getProducts(String name, String documentName);
Run Code Online (Sandbox Code Playgroud)
谢谢。
您可以使用 LIKE sql 语句在 json 列中搜索转换后的文档列表。示例:假设我们已将文档转换为如下形式以存储在数据库中:
{
name: "Title",
url: "Your_url"
}
Run Code Online (Sandbox Code Playgroud)
因此,您对列表中包含此类文档的产品的查询应该如下所示:
SELECT * FROM Product WHERE Name = :name AND Documents LIKE :documentLikeExpr
Run Code Online (Sandbox Code Playgroud)
在哪里
String documentLikeExpr = "%name: \"Title\"%";
Run Code Online (Sandbox Code Playgroud)
表达式中的%表示零个、一个或多个字符。
因此,我们在这里做的唯一一件事是使用 SQL 语言功能搜索列内字符串的一部分。
| 归档时间: |
|
| 查看次数: |
1712 次 |
| 最近记录: |