gpt4 book ai didi

Android SQLite 使用 db.query() 进行 JOIN 而不是 rawquery()

转载 作者:IT王子 更新时间:2023-10-29 06:18:53 26 4
gpt4 key购买 nike

我有表A、表B和表C表 A 和表 B 通过 tableA.Id(PK) = tableB.tableAId(FK) 连接table B 和 tableC 通过 tableB.Id(PK) = tableC.tableBId(FK) 连接

我希望能够做到这一点:

SELECT c.ALL from tableC c
INNER JOIN tableB b on c.tableBId = b.Id
INNER JOIN tableA a on b.tableAId = a.Id
WHERE a.Id = 108

我在网上找到了很多使用 db.rawquery() 来实现这个查询的帖子。但是我也听说 rawquery() 不如 query() 安全。因此,为了寻求初学者的最佳实践,我的问题是:

有没有办法使用 db.query() 而不是 db.rawquery() 来实现这个查询?

提前致谢。

最佳答案

Is there a way to implement this query using db.query() instead of db.rawquery()?

所以值得一提的是 rawQuery() 做了个把戏。但也存在另一种方法。

query() 方法旨在对一个表执行查询。 但是如何在 SQLite 中JOIN 表的最佳方法是使用 SQLiteQueryBuilder并使用 setTables() 方法,您可以加入。

因此我建议您使用提到的SQLiteQueryBuilder。但它比 rawQuery() 方法稍微复杂一些,您只需要分配原始语句。

如果不知道如何开始,请查看此示例:

注意事项:

事实是 rawQuery() 不如 query() 安全,因为 query() 方法使用预编译语句比“原始”陈述。但是您始终可以(应该)使用占位符,这会显着提高语句的安全性,作为针对 SQL 注入(inject)的主要保护,并且语句也变得更易于阅读。

关于Android SQLite 使用 db.query() 进行 JOIN 而不是 rawquery(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15852348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com