gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:07 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com