我有tableA,tableB和tableC
表A和表B通过tableA.Id(PK)= tableB.tableAId(FK)连接,
表B和tableC通过tableB.Id(PK)= tableC.tableBId(FK)连接在一起
表A和表B通过tableA.Id(PK)= tableB.tableAId(FK)连接,
表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()方法,您只需要分配raw语句就更复杂了.
如果不知道如何开始,请检查这个例子:
> How to use a join with SQLite
注意:
rawQuery()比query()的安全性更低,因为query()方法使用比“raw”语句更安全的预编译语句.但是,始终可以(应该)使用占位符,这显着增加了语句的安全性,作为sql注入的主要保护,语句也变得更加人性化.