如何防止在Android应用程序中创建多个数据库?

时间:2013-11-28 17:14:10

标签: java android sql database schema

我对Android编程比较陌生,我对SQL及其与Java的交互几乎没有经验,但我无法在教程或Google开发人员页面中找到我想要的答案。

我想知道如何在Android中创建数据库来存储各种String和int变量,而无需创建重复的数据库。我理解开发页面提供的模式和契约类概念,但我不明白我应该如何调用类方法,以便只创建一个数据库(最好是在第一次启动应用程序时) )没有创建多个实例。

我的主要问题:建议使用哪种设置来创建可以从其他类引用的数据库,从应用程序的第一次启动开始就存在,并保持私有(虽然说实话它不是一个重要的优先事项)?

3 个答案:

答案 0 :(得分:3)

  

但是我不明白我应该如何调用类方法   只创建一个数据库(最好是在第一个应用程序   发射)

在Android中,数据库只创建一次,然后每当您尝试执行CRUD操作并选择语句时,始终只创建一个数据库。对于数据库中的表,它是相同的。一旦创建了表,就不会再次创建表(因此,如果在没有新列 1 <之前创建表,则在实现期间将新表添加到表中时要小心/ SUP>)。此外,如果用户明确删除应用程序数据 - 仅在这种情况下,将再次创建数据库和表,因为它们已被删除。

  

建议使用哪种设置来创建可以的数据库   从其他类引用,从第一次启动时就存在   应用程序

在您将要求例如 getWriteableDatabase() getReadableDatabase()的那一刻,将创建数据库和表格 - 仅在此时!只有一次。没有更多(除了 1 。之后,每当您尝试尝试从/向数据库读取或写入时,您的数据库将以特定权限打开(读写)或者只读 - 它取决于您调用的方法,并且您可以执行操作。

  

没有创建多个实例。

数据库只有一个 - 它没有重复(物理上),绝对但是当应用程序逻辑没有正确指定时,可能会出现多个数据库实例,这个事实并不是很好,通常是Android和SQLite的许多初学者的噩梦

解决方案存在且实施-> Singleton 并不困难。对于我们的目标,Design pattern Singleton“非常酷的工具” - 确保只创建一个数据库实例。

以下是Singleton本身的实现:

public class DataSource extends SQLiteOpenHelper {

   private static DataSource instance;

   public static final DataSource getInstance(Context c) {
      if (instance == null) {
         instance = new DataSource(c);
      }
      return instance;
   }
}

1 如果您在创建数据库和表之前向表中添加了新列(我上面提到的只创建了一次)可能会导致应用程序异常,所以你必须清除应用程序数据或implement onUpgrade() method

答案 1 :(得分:0)

尝试使用ActiveAndroid之类的ORM。虽然不建议用于极其复杂的应用程序,但使用ORM将使没有太多数据库经验的人更容易使用和管理数据库 (并且可以使您的代码更具可读性)。

答案 2 :(得分:0)

当我在Android中创建我的第一个SQLite数据库时,我使用了this site让我了解了基础知识。

要回答您的问题,请查看DatabaseHelper类。您将看到必须指定数据库名称(文件名)。

private static final String DATABASE_NAME = "commments.db";

如果数据库不存在(新安装的应用程序),Android将自动创建数据库,并且如果它存在则将重复使用它。只要您始终使用相同的文件(并且不会弄乱表格),您的数据库将保持不变。

此外,为了安全起见,数据库存储在应用程序的数据中。无法使用文件浏览器访问(除非您是root用户)。如果确实需要,可以通过adb下载数据库。有大量关于如何获取应用私有数据的文档。

希望这有帮助!