我正在 Android 中使用 SQLite。我有一个包含三个列表的模型对象,其中一个是列表的列表。所以我有五个表:A 代表对象,B 代表列表列表,C 代表其列表,D 和 E 代表其他两个列表。让我感到困惑的情况是,如果用户正在更新现有对象,并且可能或可能没有对其列表进行任何更改。我想我必须查询每个表 B 到 E 的记录,其外键与我正在更新的记录的主键匹配,然后循环遍历这些结果以查看列表中是否有匹配的项目,手动删除/根据需要插入/更新。但在我看来应该有更好的方法吗?
相关问题:如果我将整个操作包装在 beginTransaction()
和 setTransactionSuccessful()
中,我还需要做其他事情来确保原子性吗?我从未直接处理过数据库中的锁,是否需要向现有查询添加错误检查以处理它们被阻止的事件?是否存在需要手动取消事务的错误情况,或者当我关闭数据库连接时会自动发生这种情况?
最佳答案
看看 SQLite 触发器 here ,这正是您所需要的。
如果在 beginTransaction()
之后某处发生任何错误,则 try catch 异常并且不要将此事务标记为成功。没有
setTransactionSuccessful()
调用您的数据不会受到影响。
关于android - 原子更新多个相关表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31654142/