【发布时间】:2016-12-21 19:48:23
【问题描述】:
当我在我的应用程序中编写数据库代码时,我有很多 CRUD 函数,其中大部分涉及将内容存储在 ContentValues 或使用 Cursors 或通过 SQLiteOpenHelper 对数据库对象执行操作的组合和等等等等。
对于我的应用程序中的每个对象,这意味着至少要编写 4 个(通常更多)方法。这很乏味,可能没有ORM那么复杂,我不明白如何正确使用,我担心它违反了DRY原则,但我对事情有更多的控制权。
但是,我也知道您不应该在 UI 线程之外运行 SQL 代码。这是否意味着我必须将我拥有的方法数量增加一倍,因为我需要一种方法来创建新线程/可运行,然后从那里调用相应的 CRUD 函数?
【问题讨论】:
-
你可以做很多事情——我最近一直更喜欢使用 RXJava 来做背景工作——如果你已经熟悉 RX,你可以查看github.com/square/sqlbrite。来自谷歌的推荐在这里(developer.android.com/training/load-data-background/index.html),如果你遵循它,你可能会避免很多陷阱,所以推荐给那些新去 Android 的人——我只是觉得
Loader语义相当麻烦。希望这会有所帮助。 -
编写数据库代码很乏味。没有真正的解决方法。您可以使用 ORM 等,但它们最终仍然很乏味,并且经常需要来自 db 的更多数据和对 db 的更多请求,因为要更改有关对象的任何内容,您现在需要获取整个事物。对我来说,没有太多数据表明它们确实改善了事情。关系数据不是一组对象,从效率或正确性的角度来看,将其视为一个对象很少能很好地工作。至于线程——如果一个请求很快,它完全可以在 UI 线程上完成。
标签: java android multithreading sqlite crud