J'essaie de créer une base de données locale sur un téléphone Android à l'aide de sqlite
.
J'ai une classe d'assistance, illustrée ci-dessous, qui est utilisée pour créer la base de données et fournir l'aide.
Je veux créer un objet de cette classe dans la partie principale de mon code et y créer la base de données et les tables.
Le problème:
Chaque fois que je crée un objet de la classe, il ne semble pas appeler la méthode onCreate
dans l'aide. Je pensais que c'est supposé arriver. Je pensais que onCreate
était fondamentalement un constructeur pour la classe. (Je crois que je me trompe)
onCreate
? public class SmartDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "smart_lite_db.db";
private static final int DATABASE_VERSION = 2;
private static final String NOTIFY_TABLE_NAME = "user_notify_data";
private static final String HR_TABLE_NAME = "user_hr_data";
private static final String NOTIFY_TABLE_CREATE =
"CREATE TABLE " + NOTIFY_TABLE_NAME +
" (counter INTEGER PRIMARY KEY, " +
"userresponse INTEGER, " +
"notifytime INTEGER);";
private static final String DATA_TABLE_CREATE =
"CREATE TABLE " + HR_TABLE_NAME +
" (counter INTEGER PRIMARY KEY, " +
"hr INTEGER, " +
"act INTEGER, " +
"timestamp INTEGER);";
public SmartDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.v("smartdbhelper", "before creation");
db.execSQL(NOTIFY_TABLE_CREATE);
Log.v("smartdbhelper", "middle creation");
db.execSQL(DATA_TABLE_CREATE);
Log.v("smartdbhelper", "after creation");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
private SmartDBHelper dBHelper;
public void onCreate(Bundle savedInstanceState) {
//where i am wanting to create the database and tables
dBHelper = new SmartDBHelper(getContext());
}
}
onCreate
n'est pas un constructeur pour la classe de base de données. Il est appelé uniquement si vous essayez d'ouvrir une base de données qui n'existe pas . Pour ouvrir/créer la base de données, vous devez ajouter un appel à l'une de ces méthodes:
public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
private SmartDBHelper dBHelper;
public void onCreate(Bundle savedInstanceState) {
//where i am wanting to create the database and tables
dBHelper = new SmartDBHelper(getContext());
// open to read and write
dBHelper.getWritableDatabase();
// or to read only
// dBHelper.getReadableDatabase();
}
}
C'est un peu gros, mais voici mon DatabaseAdapter, vous pouvez consulter: http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.Java
Vous devez appeler getWritableDatabase()
ou getReadableDatabase()
.
La méthode oncreate () n'est pas un constructeur et est également appelée lorsque la base de données est créée pour la première fois.Vous devez donc appeler getWritableDatabase () ou getReadableDatabase () pour ouvrir ou créer vers votre base de données.
getReadableDatabase (): - Créez et/ou ouvrez une base de données.
getWritableDatabase (): - Créez et/ou ouvrez une base de données qui sera utilisé pour la lecture et l'écriture.