当有很多CRUD方法时,从UI线程运行SQLite代码的正确方法是什么?

问题描述:

当我在我的应用程序中编写数据库代码时,我有很多CRUD函数,其中大部分涉及将某些东西存储在ContentValues或使用Cursors或通过SQLiteOpenHelper等对数据库对象执行操作的组合。当有很多CRUD方法时,从UI线程运行SQLite代码的正确方法是什么?

对于我的应用程序中的每个对象,这意味着至少要写4个 - 通常更多的方法。这很乏味,可能不像ORM那么复杂,我不知道如何正确使用,我担心它违反DRY原则,但我对事物有更多的控制权。

但是,我也知道你不应该从UI线程运行SQL代码。这是否意味着我必须加倍我拥有的方法数量,因为我需要一种方法来创建新线程/ runnable,然后从那里调用相应的CRUD函数?

+0

有很多的事情可以做 - 如果你已经熟悉了 - 我一直在使用RXJava背景的东西最近喜欢RX,你可以查看https://github.com/square/sqlbrite。谷歌的建议在这里(https://developer.android.com/training/load-data-background/index.html),如果你遵循它,你可能会避免很多陷阱,所以建议那些是新去Android - 我只是发现'Loader'的语义相当麻烦。希望这可以帮助。 – theFunkyEngineer

+0

编写数据库代码非常繁琐。没有真正的解决方法。您可以使用ORM等,但它们最终会变得单调乏味,并且经常需要来自db的更多数据以及更多的数据请求,因为要更改有关对象的任何信息,您现在需要获取整个事物。我没有很多数据显示他们实际上改善了事情。关系数据不是一组对象,并且从效率或正确性的角度来看,将它看作一个对象很少有效。至于线程 - 如果请求很快,则完全可以在UI线程上完成。 –

我建议您使用ContentProviderContentResolver来管理您的数据库。您可以使用AsyncQueryHandler轻松执行主线程的操作。

我还创建了一个小型图书馆,帮助您与 - Bender