1

我正在使用 OrmLite 来处理 Android 应用程序中的持久性。

OrmLite 文档讨论了DAO Enabled Objects,并提供了一个类,您可以extend告诉 OrmLite 您希望Dao从数据库中检索到的类的实例上的集合。

这有一些不错的属性,比如让object.update()object.refresh()DTRT。

对于非数据库生成的对象,object.setDao(Dao)您可以使用一种方法。

Dao在开始时将 a 初始化为类上的静态成员变量会不会有问题?

public class Order extends BaseDaoEnabled<Order, Integer> {
    protected static globalDao = null;
    public Order() {
        // Set non-static dao used by parent BaseDaoEnabled
        this.dao = globalDao;
    }

在程序的主类中,我将globalDao使用适合该对象的 Dao 进行一次初始化。

这将有一个很好的特性,即允许我们在给定类的实例的情况下执行数据库操作,即使没有访问OrmLiteSqliteOpenHelper.getDao().

认为这是线程安全的,因为我对DaoManager的阅读表明每个类通常只有一个 Dao。

4

1 回答 1

0

[ 回复晚了非常抱歉。]

在开始时将 Dao 初始化为类上的静态成员变量会不会有问题?

是和不是。您需要确保在应用程序关闭时将 DAO 设置为,null以便在它返回时重新初始化。问题是我看到应用程序已停止但类仍在内存中。然后,如果用户重新运行应用程序,static初始化程序将不会被重新实例化,并且现在与数据库的死连接的旧版本 DAO 将就位。

正确的做法是反映DatabaseHelper类在 HelloAndroid 项目中使用的行为。套用它:

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

   private Dao<SimpleData, Integer> simpleDao = null;

   public Dao<SimpleData, Integer> getDao() throws SQLException {
       if (simpleDao == null) {
           simpleDao = getDao(SimpleData.class);
       }
       return simpleDao;
   }

   @Override
   public void close() {
       super.close();
       simpleDao = null;
   }
于 2013-12-18T21:38:41.190 回答