Android SQLiteOpenHelper类中的上下文是什么。如果我们提供不同类的不同上下文怎么办?
当我用SQLiteOpenHelper类扩展我的DatabaseClass时,我必须实现构造函数,它的参数中必须包含上下文。如果我必须将此数据库与我的其他类一起使用,则上下文可能会更改。当我提供不同的上下文时,会做哪些更改Android SQLiteOpenHelper类中的上下文是什么。如果我们提供不同类的不同上下文怎么办?,android,sqlite,Android,Sqlite,当我用SQLiteOpenHelper类扩展我的DatabaseClass时,我必须实现构造函数,它的参数中必须包含上下文。如果我必须将此数据库与我的其他类一起使用,则上下文可能会更改。当我提供不同的上下文时,会做哪些更改 public class DatabaseClass extends SQLiteOpenHelper { static String TABLE_NAME = "hammad"; static String DATABASE_NAME = "databases.db";
public class DatabaseClass extends SQLiteOpenHelper {
static String TABLE_NAME = "hammad";
static String DATABASE_NAME = "databases.db";
SQLiteDatabase database;
public DatabaseClass(Context context) {
super(context, DATABASE_NAME, null, 1);
Log.i("xcv", "Constructor called");
this.database = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
Log.i("xcv", "OnCreate");
try {
sqLiteDatabase.execSQL("create table student (id integer primary key autoincrement,name varchar)");
Log.i("xcv", "On Create query Table created");
} catch (Exception ffff) {
Log.i("xcv", "2:"+ffff.getMessage());
}
}
StartPage.java
public class StartPage extends AppCompatActivity {
DatabaseClass database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_page);
setLoginBtn(); // Set Login Btn
database=new DatabaseClass(this);
}
}
Class2.java
public class Class2 extends AppCompatActivity {
DatabaseClass database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_page);
setLoginBtn(); // Set Login Btn
database=new DatabaseClass(this);
}
}
“上下文可能会改变”你应该先弄清楚这句话。。。是的,每次通过从不同类调用来创建数据库的新实例时,上下文都会更改,并且必须更改。。。。Bcoz上下文表示此活动具有访问数据库的权限。。。。因此,当您传递xyz活动的“this”
,则xyz有权访问数据和修改数据库中的数据。。。这就像在控制数据库资源之前向数据库出示身份证一样
您还可以通过传递上下文从任何类访问数据库,您可以检索数据、修改数据和关闭连接
场景:
就像家里的一台冰箱,你只能打开,看里面有什么。。你可以拿些东西吃。。。或者你可以在某个地方。。。同样的事情也可以由任何家庭成员来做。。。而“此”
或“上下文”
是个人SQLiteOpenHelper
使用传入的上下文
查找数据库文件所在的应用程序包专用数据目录。该包是应用程序的AndroidManifest.xml
中声明的包,而不是类文件的Java包
应用程序中的所有Context
s都具有相同的包私有数据目录,并且数据库可以与任何有效的Context
一起正常工作,因此,如果在另一个包上有一个数据库类,它与包私有数据目录相同呢???它是应用程序的包(在应用程序清单文件中),不是java类的java包。谢谢你也可以使用getApplicationContext()
。这在任何地方都是一样的