Java 使用SQLiteDatabase实例作为应用程序类中的静态字段是一个好主意吗?
我正在开发一个字典android应用程序。我正在使用应用程序中的数据库来获取单词及其含义。在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
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(...);