java - 将 SQLiteDatabase 实例用作 Application 类中的静态字段是个好主意吗?

标签 java android sqlite

我正在开发一个字典 android 应用程序。我在应用程序中使用数据库来获取单词及其含义。在 Application 类中使用静态 SQLiteDatabase 并在某些 Activity 和类中使用它是一种好方法吗?

public class App extends Application {
  public static SQLiteDatabase database;

  @Override
  public void onCreate() {
    super.onCreate();

    database = SQLiteDatabase.openOrCreateDatabase(
            Constants.MAIN_DB_PATH,
            null);
  }

并以这种方式使用它:

public class MainActivity extends AppCompatActivity {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...

        Cursor cursor = App.database.rawQuery(query, null);

        ...

    }
}

和:

public class MyClass{
    ...

    public MyClass() {
        ...

        Cursor cursor = App.database.rawQuery(query, null);

        ...
    }

}

最佳答案

由于您只需要此对象的一个​​实例,因此这是一种可行的方法。 您可以定义数据库:

public class Database{
    private static SQLiteDatabase localDatabase = null;
    private Database(){}

    public static SQLiteDatabase getLocalDatabase(){
        if (localDatabase == null){
            localDatabase = SQLiteDatabase.openOrCreateDatabase(...);
        }
        return localDatabase;
    }
}

在您的 Activity 代码中,您可以像这样使用它:

Database.getLocalDatabase().rawQuery(...); 

编辑:要应用单例模式的所有规则,还要添加一个私有(private)和空的构造函数,这样您就不会意外地实例化对象。

关于java - 将 SQLiteDatabase 实例用作 Application 类中的静态字段是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57574493/

相关文章:

android - Eclipse 上是否有任何 SQLite 客户端来分析 Android 应用程序中使用的数据库?

java - 使用javascript更改网页元素的支持bean的值?

java - platform 和 api 这两个词到底是什么意思?

缺少 Android Activity XML 资源标识符

Retrofit 和 RxJava 的 Android 问题

python - 如何将 HTML 存储在数据库中(SQLITE PYTHON)

java - 为什么 SingleThreaded Executor 服务使用 4 个核心?

java - ResourceConfig实例不包含任何根资源类

java - 在 Java 中比较字符串

tsql - SQLite 等效于 SQL Server DateAdd 函数