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

标签 java android sql database schema

我是 Android 编程的新手,对 SQL 及其与 Java 的交互几乎没有经验,但我无法在教程或 Google 的开发者页面中找到我正在寻找的答案。

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

我的主要问题:建议使用哪种设置来创建可以从其他类引用的数据库,该数据库从应用程序首次启动时就存在,并且保持私有(private)(尽管老实说这不是一个重要的优先事项)?

最佳答案

but I don't understand how I am supposed to call a class method so that only a single database is created (preferably at first app launch)

在 Android 中,数据库只创建一次,然后在您尝试执行 CRUD 时创建。操作和选择语句,您将始终只创建一个数据库。数据库中的表也是如此。一旦创建了表,它们将不会再次创建(如果表是在没有新列的情况下创建的,那么在实现过程中向表添加新列时要小心1)。此外,如果用户明确删除应用程序数据 - 仅在这种情况下,数据库和表将被重新创建,因为它们已被删除。

What sort of setup is recommended to create a database that can be referenced from other classes, exists from the very first launch of the app

在您调用例如 getWriteableDatabase()getReadableDatabase() 时,数据库和表将被创建 - 仅在此时!只有一次。不再(1 除外。之后,每当您尝试从/写入数据库时​​,您的数据库将以特定权限打开(读写或只读 - 这取决于您调用的方法)以及您可以执行的操作。

without several instances being created.

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

但是解决方案存在并且实现起来并不难-> 单例Design pattern 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 .

关于java - 如何防止在 Android 应用程序中创建多个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20271625/

相关文章:

java - java代码中的If Else错误

java - 使用 themoviedb 获取 401,并进行改造

android - Delphi android 应用程序在 Lennova A5000 移动设备中引发问题

SQL Sum of last X Sum of records

sql - 地理( map )数据的理想数据库

php - 在 MYSQL 中使用单个查询获取 3 个不同 SUM 的 "best"方法是什么

java - 什么是 "java.sql.SQLException: No value specified for parameter 1 "?

用于 Web 服务的 Java 1.3 库

安卓布局动画 Controller : How to force the first child to wait for the last child's animation to finish before repeating?

Android 启动/停止服务