关于数据库助手

时间:2012-02-24 14:45:35

标签: android android-ndk

我有一个数据库助手类

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 个答案:

答案 0 :(得分:2)

如果数据库不存在,它将在创建DatabaseHelper期间运行onCreate,如果数据库存在且使用较低的DATABASE_VERSION

创建,它将在onUpgrade上运行

答案 1 :(得分:1)

不会每次都不会打电话。关于开放助手和你提出的代码,你需要知道两件事:

  1. OnCreate只会调用一次(首次创建数据库时)。然后(只要您的数据库存在),将永远不会再调用此代码。 因为你在onUpgrade中手动调用onCreate()(我不推荐):

  2. 在您的超级构造函数中,您解析数据库版本。此版本由助手存储,只要此版本保持不变,就不会调用onUpgrade。 2。

答案 2 :(得分:0)

定义DB适配器的正确方法如下所示。我在很多项目中使用它。

用法是:

  • in onCreate():
    mDB = new DBAdapter(this); 
    mDB.open();
  • in onDestroy():
    mDB.close();
    mDB = null;
  • 和DB Adapter类:

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

    }