说我有两个表来跟踪一个银行帐户:
Account:
------------------------------
AccountID| Account Value
------------------------------
| 0 | 1000
Transactions:
------------------------------------------------
TransactionID| Transaction Value| Paying Account
-------------------------------------------------
| 23 | -50.0 | 0
--------------------------------------------------
| 24 | -5 | 0
TransactionID = 24有一个更新,新值是-10。 更新帐户价值以反映此更改的最佳方法是什么?
我在代码中所做的是
然后将新的交易值应用于该帐户
AccountDAO acc = mDatabase.AccountDAO().getAccount(0);
acc.account_value += transaction_id_24.value * -1;
acc.account_value += transaction_id_24_updated.value;
mDatabase.AccountDAO().updateAccount(acc);
上述方法有效,但是我觉得上面有一种更好的自动化方法。
数据库是否可以通过任何方式自动检测到交易金额已更改,然后更新sqlite / android-room中的相应帐户?
答案 0 :(得分:1)
Room内置了您所需的所有工具:
在房间中使用LiveData
Room持久性库支持可观察的查询,这些查询返回LiveData对象。可观察到的查询是作为数据库访问对象(DAO)的一部分编写的。
更新数据库时,Room生成所有必需的代码来更新LiveData对象。需要时,生成的代码在后台线程上异步运行查询。此模式对于使UI中显示的数据与数据库中存储的数据保持同步非常有用。您可以在《 Room持久性库指南》中阅读有关Room和DAO的更多信息。
只需观察您在Room中的@Query返回的LiveData,即可对返回的结果执行其他逻辑。
答案 1 :(得分:1)
这是触发器的典型用例。 希望这个例子有帮助。
var meshes = new THREE.Group();
var mesh1 = new THREE.Mesh( geometry, material );
var mesh2 = new THREE.Mesh( geometry, material );
var mesh3 = new THREE.Mesh( geometry, material );
meshes.add( mesh1 );
meshes.add( mesh2 );
meshes.add( mesh3 );
scene.add( meshes );