Java 使用SQLiteDatabase实例作为应用程序类中的静态字段是一个好主意吗?

Java 使用SQLiteDatabase实例作为应用程序类中的静态字段是一个好主意吗?,java,android,sqlite,Java,Android,Sqlite,我正在开发一个字典android应用程序。我正在使用应用程序中的数据库来获取单词及其含义。在Application类中使用静态SQLiteDatabase,并在某些活动和类中使用它,这是一种好方法吗 public class App extends Application { public static SQLiteDatabase database; @Override public void onCreate() { super.onCreate(); dat

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

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 Database{
    private static SQLiteDatabase localDatabase = null;
    private Database(){}

    public static SQLiteDatabase getLocalDatabase(){
        if (localDatabase == null){
            localDatabase = SQLiteDatabase.openOrCreateDatabase(...);
        }
        return localDatabase;
    }
}
在活动代码中,您可以像这样使用它:

Database.getLocalDatabase().rawQuery(...); 
编辑:要应用Singleton模式的所有规则,还需要添加一个私有的空构造函数,这样就不能意外地实例化对象

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