О Помощнике по базам данных - PullRequest
1 голос
/ 24 февраля 2012

У меня есть класс помощника по базе данных

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 = new DatabaseHelper (context).Если это будет выполнять db.execSQL (DATABASE_CREATE);каждый раз, когда моя программа запускается?Эта строка предназначена для создания новой базы данных;

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

Он будет запускаться onCreate во время создания DatabaseHelper, если база данных не существует, и будет запускаться onUpgrade, если база данных существует и была создана с более низким значением DATABASE_VERSION

1 голос
/ 24 февраля 2012

Нет, он не будет вызываться каждый раз. Об открытом помощнике и коде, который вы постете, нужно знать 2 вещи:

  1. OnCreate будет вызываться только один раз (когда ваша база данных создается впервые). Затем (пока ваша база данных существует) этот код больше никогда не будет вызываться. так как вы вызываете onCreate () вручную в вашем onUpgrade (что я бы не рекомендовал):

  2. В вашем супер-конструкторе вы анализируете версию базы данных. Эта версия сохраняется помощником, и пока она остается неизменной, onUpgrade не будет вызываться. 2.

0 голосов
/ 24 февраля 2012

Правильный способ определения адаптера БД приведен ниже.Я использую его во многих проектах.

Использование:

  • в onCreate ():
    mDB = new DBAdapter(this); 
    mDB.open();
  • в onDestroy ():
    mDB.close();
    mDB = null;
  • и класс адаптера БД:

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

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...