代码之家  ›  专栏  ›  技术社区  ›  Samuh

SQLite数据库与数据访问逻辑

  •  2
  • Samuh  · 技术社区  · 14 年前

    问题:

    我必须创建许多表来缓存通过读取XMLs获得的一些文本数据。这些表只需要在应用程序初次运行时创建一次。表格中的数据应在固定时间段后清除。应该有一个向其他类公开的类,允许对该数据库执行CRUD操作。

    我有一些问题,请帮忙:

    1. 我应该有多少个DataBaseHelper(DBAdapter)类,我猜只有一个?可以将所有的SQLDDL和DML语句、DB名称、表名称作为此类的静态字符串吗?
    2. 如何确保表只创建一次?
    3. 在设计数据库时,有什么最佳实践需要遵循吗?
    4. 数据库中的数据将显示在列表中。我在ArrayLists(在解析XML时创建)和数据库(在持久化这些列表之后)中有数据。我应该使用什么适配器来备份列表?我应该使用ListAdapter还是CursorAdapter?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    8 年前

    在这种情况下,最简单的方法就是坚持 数据共享 . 它们允许您将与数据库相关的逻辑(数据库表的设置、数据库升级的管理、CRUD操作)与应用程序的其余部分完美分离。

    与其在这里重写,不如把你链接到我在这里写的关于这个问题的帖子: Android Database Access Design Approach

    数据库中的数据将显示在列表中。我在ArrayLists(在解析XML时创建)和数据库(在持久化这些列表之后)中有数据。我应该使用什么适配器来备份列表?我应该使用ListAdapter还是CursorAdapter?

    是的,这种情况下光标适配器可能没问题。在ListActivity中,可以执行如下查询

    ...
    CursorAdapter adapter = managedQuery(....);
    setListAdapter(adapter);
    ...
    

    ...
    getContext().getContentResolver().notifyChange(uri, null);
    ...
    

    在insert/update/delete方法中,它将通知注册的观察者更新其数据。

        2
  •  1
  •   codinguser    14 年前
    1. 一个就可以了。是的,SQL语句作为静态字符串也可以。
    2. 通过执行SQL在helper的onCreate方法中创建数据库。Android将确保这种情况只发生一次。以后可以使用版本号升级数据库。
    3. 是的,只要从helper中检索数据库对象,并随时执行SQL来清除数据库。你可以用定时器来安排。
    4. SQLite数据库最佳实践在这里也同样适用。