2016-08-17 80 views
-1

當我用SQLiteOpenHelper類擴展我的DatabaseClass時,我必須實現必須在其參數中包含Context的構造函數。如果我必須使用這個數據庫與我的其他類上下文可能會改變。當我提供不同的上下文時會做什麼更改。SQLiteOpenHelper類中的上下文是什麼如果我們提供不同類的不同上下文?

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); 

    } 
} 
+0

你也可以使用'getApplicationContext()'。那到處都是一樣的 – tynn

回答

1

「語境下可以改變」 你應該先明確該行...是的情況下將改爲每當你通過從不同的類調用創建數據庫的新實例,它必須改變.... Bcoz上下文是指出這個活動有訪問數據庫的權限....所以當你通過"this"的xyz活動,那麼xyz有權訪問數據和修改數據庫中的數據......這就像在控制其資源之前顯示一個ID卡到數據庫....

此外,您可以訪問您的數據庫從任何類通過上下文,你可以檢索數據,修改數據和關閉連接...

Scenario :它像一個家庭中的單個冰箱,你可以打開ñ只看到它是什麼..你可以拿出東西和吃它......或者你可以放置在某些東西......而任何一個家庭成員都可以做同樣的事情......雖然"this""context"是個人

0

SQLiteOpenHelper使用傳入的Context來查找數據庫文件所在的應用程序包 - 專用數據目錄。該包是在您的應用AndroidManifest.xml中聲明的package,而不是您的類文件的Java包。

在您的應用程序中的所有Context都具有相同的包私有數據目錄,並且數據庫可以在任何有效的Context下正常工作。

+0

那麼如果在另一個包上有一個數據庫類,它與包 - priivate數據目錄是一樣的? –

+0

它是你的應用程序包(在你的應用程序清單文件中),而不是你的java類的java包。 – laalto

+0

Thankew Brother <3 :) –

相關問題