SQLite数据库和数据访问逻辑

时间:2010-08-30 11:34:20

标签: android sqlite

问题:

我必须创建一些表来缓存一些通过读取XML获得的文本数据。这些表只需要在应用程序的初始运行时创建一次。应在固定时间段后清除表中的数据。应该有一个暴露给其他类的类,它允许在这个数据库上进行CRUD操作。

谷歌搜索找到了一些指向创建数据库和数据访问逻辑的教程的链接。

我有一些问题,请帮忙:

  1. 我应该拥有多少个DataBaseHelper(DBAdapter)类,我猜只有一个?是否可以将所有SQL DDL和DML语句,DB名称,表名称作为此类的静态字符串?
  2. 如何确保只创建一次表?
  3. 是否可以在固定的时间间隔后清除数据库?
  4. 在设计数据库时是否有任何最佳做法?
  5. 数据库中的数据将显示在列表中。我在ArrayLists(在解析XML时创建)以及数据库(在这些列表被保留之后)中有数据。我应该使用什么适配器来备份列表?我应该使用ListAdapter还是CursorAdapter?
  6. 感谢。

2 个答案:

答案 0 :(得分:1)

  1. 一个人会好的。是的,SQL语句作为静态字符串也可以。
  2. 通过执行SQL在helper的onCreate方法中创建数据库。 Android将确保只发生一次。您可以使用版本号稍后升级数据库。
  3. 是的,只需从帮助程序中检索数据库对象,然后执行SQL以随时清除数据库。您可以使用计时器来安排此操作。
  4. SQLite数据库最佳实践也适用于此。
  5. 不清楚你的意思,但无论如何都会尝试。您可以使用CursorAdapter将数据库条目绑定到ListView。如果您只想保存列表,可以使用从SQLiteDatabase.query(...)返回的Cursor遍历数据库并保存到文件中。或者,如果您仍将解析后的数据作为内存中的ArrayList,您仍然可以将其保存到文件中。

答案 1 :(得分:1)

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

不是在这里重写,而是将链接到我在这个问题上完成的帖子:Android Database Access Design Approach

  

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

是的,在这种情况下,CursorAdapter可能很好。然后,在ListActivity中,您可以执行类似

的查询
...
CursorAdapter adapter = managedQuery(....);
setListAdapter(adapter);
...

如果正确实现了ContentProvider,则会自动刷新列表。因为在这种情况下你会有一行像

...
getContext().getContentResolver().notifyChange(uri, null);
...
插入/更新/删除方法中的

将通知已注册的观察者更新其数据。