我有一个数据库助手类
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);每次我的程序开始?该行用于创建新数据库;
答案 0 :(得分:2)
如果数据库不存在,它将在创建DatabaseHelper期间运行onCreate,如果数据库存在且使用较低的DATABASE_VERSION
创建,它将在onUpgrade上运行答案 1 :(得分:1)
不会每次都不会打电话。关于开放助手和你提出的代码,你需要知道两件事:
OnCreate只会调用一次(首次创建数据库时)。然后(只要您的数据库存在),将永远不会再调用此代码。 因为你在onUpgrade中手动调用onCreate()(我不推荐):
在您的超级构造函数中,您解析数据库版本。此版本由助手存储,只要此版本保持不变,就不会调用onUpgrade。 2。
答案 2 :(得分:0)
定义DB适配器的正确方法如下所示。我在很多项目中使用它。
用法是:
mDB = new DBAdapter(this); mDB.open();
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);
}
}
}