Android 在一个应用程序中,SQLiteOpenHelper提供的所有数据库是否都是用相同的名称构建的,并保证它们是相同的?
如果一个应用程序中的多个活动调用我的SQLiteOpenHelper的构造函数,并将其自身作为上下文参数,我是否可以确保它们都将访问同一个数据库 例如,假设我有:Android 在一个应用程序中,SQLiteOpenHelper提供的所有数据库是否都是用相同的名称构建的,并保证它们是相同的?,android,android-sqlite,android-context,Android,Android Sqlite,Android Context,如果一个应用程序中的多个活动调用我的SQLiteOpenHelper的构造函数,并将其自身作为上下文参数,我是否可以确保它们都将访问同一个数据库 例如,假设我有: package foo.bar; public class Activity1 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
package foo.bar;
public class Activity1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SQLiteDatabase db = new MySQLiteOpenHelper(this).getReadableDatabase();
:
}
}
及
下面是我的子类的骨架:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "comments.db";
private static final int DATABASE_VERSION = 1;
public MySQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
:
}
我找不到任何能保证这两个活动得到相同数据库的东西。另一方面,我还没有看到有人提到在一个应用程序中从上下文中获取不同的数据库。数据库路径是否保证相同?如果您按照安卓用户的建议执行()
然后是,应用程序中的所有活动都将看到相同的数据库
SQLiteOpenHelper
有2个构造函数,它们的第二个参数是数据库文件名
如果在不同的活动中使用SQLiteOpenHelper
时使用了相同的数据库文件名,则可以访问相同的数据库
这通常在您创建的继承类的构造函数中处理-数据库\u NAME
是一个常量:
public MySQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
谢谢你的回复和指点。我确实以推荐的方式扩展了SQLiteOpenHelper。我看不出链接文档中哪里有说明上下文参数是如何使用的。@espertus重要的不是
context
参数,而是SQLiteOpenHelper
构造函数的name
参数。您应该在DatabaseOpenHelper@njzk2我想知道,虽然答案是不必要的,但你对构造器的看法当然是对的。我会修好我的帖子。我仍然不知道在同一个应用程序中使用不同的上下文会给我提供相同的数据库。@espertus这是因为您请求相同的数据库文件名。那么上下文参数用于什么?它在内部允许访问数据库、读取文件等。谢谢,尽管我仍然希望它出现在文档中。当然,这不是第一次有人希望Android API更加明确。
public MySQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}