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

Java 如何防止在Android应用程序中创建多个数据库?,java,android,sql,database,schema,Java,Android,Sql,Database,Schema,我对Android编程比较陌生,对SQL及其与Java的交互几乎没有经验,但我在教程或谷歌的开发者页面上都找不到我想要的答案 我想知道如何在Android中创建一个数据库来存储各种字符串和int变量,而不创建重复的数据库。我理解开发页面中提出的模式和契约类概念,但我不理解如何调用类方法,以便只创建一个数据库(最好是在第一次应用程序启动时),而不创建多个实例 我的主要问题是:建议采用什么样的设置来创建一个可以从其他类引用的数据库,该数据库从应用程序首次启动时就存在,并且保持私有(尽管老实说,这不是

我对Android编程比较陌生,对SQL及其与Java的交互几乎没有经验,但我在教程或谷歌的开发者页面上都找不到我想要的答案

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

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

尝试使用类似ORM的数据库。虽然不建议对极其复杂的应用程序使用ORM,但对于没有太多数据库经验的人来说,使用ORM将使使用和管理数据库变得更加容易(也可以使代码更具可读性)

但我不明白我怎么能这么快调用类方法 只创建一个数据库(最好在第一次应用时创建) 发射)

在Android中,数据库只创建一次,然后每当您尝试执行
CRUD
操作并选择语句时,总是只创建一个数据库。数据库中的表也是如此。一旦创建了表,它们就不会再被创建了(所以,如果以前创建的表没有新列,那么在实现过程中向表中添加新列时要小心)。此外,若用户显式删除应用程序数据,则只有在这种情况下,才会再次创建数据库和表,因为它们已被删除

建议使用什么样的设置来创建可以 从其他类引用,从 应用程序

在调用例如getWriteableDatabase()或getReadableDatabase()时,将创建数据库和表-仅在此时!只有一次。没有其他权限(除了1。此后,无论何时尝试从/向数据库读写,您的数据库都将以特定权限(读写或只读-取决于您调用的方法)打开,并且您可以执行操作

没有创建多个实例

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

但是解决方案是存在的,实现
->
Singleton并不困难。对于我们的目标来说,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如果您在之前创建数据库和表时向表中添加了新列(我在上面提到的方法是只创建一次),则可能会导致应用程序异常,因此您必须在这里清除应用程序数据或。当我在安卓中创建第一个SQLite DB时,我经常使用基本知识

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

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

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

希望这有帮助

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