2012-02-24 42 views
1

我有一個數據庫,輔助類有關數據庫幫手

private static class DatabaseHelper extends SQLiteOpenHelper{ 
     DatabaseHelper(Context context){ 
      super(context,DATABASE_NAME,null,DATABASE_VERSION); 
     } 
     @Override 
     public void onCreate(SQLiteDatabase db){ 
      db.execSQL(DATABASE_CREATE); 
     } 
     @Override 
     public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ 
      Log.w(TAG, "Upgrading database from version " + oldVersion + "to" + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS titles"); 
      onCreate(db); 
     } 
    } 

在我的項目,我需要創建這個DatabaseHelper像DatabaseHelper AA =新DatabaseHelper(上下文)的新對象。如果這將執行db.execSQL(DATABASE_CREATE);每次當我的程序啓動?這一行用於創建一個新的數據庫;

回答

1

不會每次都調用它。關於開放助手和代碼,你postet你需要知道兩件事情:

  1. 的OnCreate只調用一次(當第一次創建數據庫)。然後(只要你的數據庫存在),這段代碼將永遠不會再被調用。因爲你在onUpgrade(我不推薦)手動調用onCreate():

  2. 在你的超級構造函數中,你解析一個數據庫版本。這個版本由助手存儲,只要這個版本保持不變,onUpgrade就不會被調用。 2.

0

定義數據庫適配器的正確方式如下所示。我在很多項目中使用它。

的用法是:

    中的onCreate
  • ():
 
    mDB = new DBAdapter(this); 
    mDB.open(); 
  • 中的onDestroy():
 
    mDB.close(); 
    mDB = null; 
  • 和DB適配器類:

    package .... 
    
    
        /** 
        * The internal database adapter 
        * @author Yar 
        */ 
    
        public class DBAdapter { 
    private static final String DATABASE_NAME = "...."; 
    private static final int DATABASE_VERSION = 1; 
    
    private static final String TABLE_SOMETHING = "something_tab"; 
    
    // Columns names definitions:   
    public static final String COL_ID = "id";   //key 
    public static final String COL_NAME = "name"; 
    
    private SQLiteDatabase mDb; 
    private DBOpenHelper mDbHelper; 
    
    
    public DBAdapter(Context pContext) {   
        mDbHelper = new DBOpenHelper(pContext, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    
    /** 
    * Close the database 
    */ 
    public void close() { 
        mDb.close(); 
    } 
    
    /** 
    * Open the database, create if not found 
    * @throws SQLiteException 
    */ 
    public void open() throws SQLiteException { 
        mDb = mDbHelper.getWritableDatabase(); 
    } 
    
    
    
    ....... functions getting/setting data from database 
    
    
    
    
    /** 
    * The DB helper class 
    * @author Yar 
    */  
    private static class DBOpenHelper extends SQLiteOpenHelper { 
    
        public DBOpenHelper(Context context, String name, CursorFactory factory, int version) { 
         super(context, name, factory, version); 
        } 
    
        // SQL Statements to create a new database. 
        private static final String TABLE_SOMETHING_CREATE = 
         "create table "+TABLE_SOMETHING+" ("+COL_ID+" integer primary key autoincrement, "+ 
                  COL_NAME+" text not null); "; 
    
        @Override 
        public void onCreate(SQLiteDatabase pDb) { 
         pDb.execSQL(TABLE_SOMETHING_CREATE); 
        } 
    
        @Override 
        public void onUpgrade(SQLiteDatabase pDb, int pOldVersion, int pNewVersion) { 
         // Drop the old table. 
         pDb.execSQL("DROP TABLE IF EXISTS " + TABLE_SOMETHING); 
         // Create a new one. 
         onCreate(pDb);    
        } 
    } 
    

    }

2

它將創建DatabaseHelper的過程中運行的onCreate如果數據庫不存在,如果該數據庫存在,它將運行onUpgrade和創建的時間較短DATABASE_VERSION