【问题标题】:Android Room: How to know if a primary key exists?Android Room:如何知道主键是否存在?
【发布时间】:2019-01-08 04:08:43
【问题描述】:

使用 Android Room 库,如何编写一个 Dao 方法,该方法返回一个布尔值,指示数据库中是否存在主键?

【问题讨论】:

标签: android android-room


【解决方案1】:

sqlite pragma 包含此信息(如果列是主键,则列上的 pk=1)因此执行与 sqlite_master 连接的查询(以获取数据库中的所有表)应该这样做。我的 DAO 语法有点生疏,但查询有效

@Query("SELECT 
  count(*)!=0
FROM 
  sqlite_master AS m
JOIN 
  pragma_table_info(m.name) AS p
Where 
  p.pk=1")
 public abstract bool findPrimaryKeyExistsInDB();

https://www.sqlite.org/pragma.html#pragfunc

【讨论】:

  • 我实际上是想知道 Room 库是否有 API,但目前看来编写原始 SQL 是唯一的方法。
  • room 不支持 pragma,我不认为它在路线图上,因为它不是一个常见的用例,如果你需要它,rawquery/query 会处理它
【解决方案2】:

您可以通过以下代码进行计数并返回(布尔值):

@Query("SELECT count(*)!=0 FROM PERSON WHERE UID = :uid ")
boolean containsPrimaryKey(int uid);

哪里,uid -> 你的主键
PERSON-> 你的表名
它对我有用,希望对你也有用。

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 2010-10-08
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多