java - 在 DAO 模式中放置交易的位置

标签 java android sqlite dao

在使用 DAO 模式的 Android 应用中,在哪里实现交易?

假设我有一个域类 A 和一个对应的 DAO 类。 触摸屏幕上的按钮,我想在交易中执行以下操作:

  1. 更新由对象 a1(属于 A 类)表示的数据库记录
  2. 为对象 a2(属于 A 类)创建一条新的数据库记录

我能想到的唯一选择是在 fragment 本身中这样做:

SQLiteDatabase db = new MySQLiteOpenHelper().getWritableDatabase();
db.beginTransaction();
DaoForA dao = new DaoForA();
dao.update(a1);
dao.insert(a2);
db.endTransaction();

这会导致数据层代码乱丢 fragment 。我也不想通过在其中包含此业务逻辑来淡化 DAO 类。有更清洁的替代品吗?

最佳答案

当这两个操作必须在一个事务内时,则必须从调用这两个操作的代码中控制该事务。 (可以有嵌套的事务,但无论如何,最外层的事务才是重要的。)

如果您不想在 fragment 中使用此代码,请将其放入一个函数中,您可以将该函数移入另一个对象,可能是一个单独的业务逻辑对象。 但是,此代码必须位于某处


请注意,您的代码将始终回滚所有更改;规范的交易形式如下:

db.beginTransaction();
try {
    // ... do all the stuff ...
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

关于java - 在 DAO 模式中放置交易的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26772200/

相关文章:

java - GWT 资源包找不到类路径

android - 是否需要调用 PreferenceManager.setDefaultValues() 来清除首选项?

sql - 如何在iOS应用程序中嵌入SQL?

java - JNI::c语言内部如何计算hbmcolor

java - JPMS 是否支持来自 META-INF/services 的自动模块服务?

android - 使用 onResume() 刷新 Activity

Android JNI,如何使用soname libxx.so.1.2.3加载库

java - SQLiteException 未被捕获

Android SQLite 插入工作,查询不工作

java - 结合最新的和冷的观察结果