Android/SQLite droit d'ouvrir/fermer la db?
Je suis un peu nouveau pour la POO donc je veux savoir si im faire les choses correctement. Pour la communication avec la base de données, j'ai créé une classe SQLiteHelper sorcière n'tous les trucs habituels (onCreate, onUpdate) et aussi ouvre et ferme la connexion.
Ici, c'est la classe, au moment où il vient sur la table, mais d'autres seront ajoutées:
public class SQLiteHelper extends SQLiteOpenHelper{
public static final String DATABASE_NAME = "notebook";
public static final int DATABASE_VERSION = 2;
public static final String TABLE_LIST = "list";
public static final String TABLE_LIST_ID = "_id";
public static final String TABLE_LIST_NAME = "name";
public SQLiteDatabase db;
public SQLiteHelper(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
db.execSQL("create table " + TABLE_LIST + "(" + TABLE_LIST_ID
+ " integer primary key autoincrement, " + TABLE_LIST_NAME
+ " text not null);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_LIST);
onCreate(db);
}
public void open(){
db = getWritableDatabase();
}
public void close(){
db.close();
}
}
Et à côté de chaque table, je vais créer une nouvelle classe de la sorcière s'étend classe précédente andd où je fais toutes les opérations relatives au tableau.
Par exemple ListSQL:
public class ListSQL extends SQLiteHelper {
public ListSQL(Context context) {
super(context);
}
public void delete(int id) {
open();
db.delete(TABLE_LIST, TABLE_LIST_ID + " = " + id, null);
close();
}
}
Ma question est qu'en programmation orientée objet, est-ce la bonne façon de faire les choses? Espesially l'utilisation d'ouvrir/fermer les méthodes et les db et les variables de TABLE en ListSQL paraître un peu étrange pour moi?
Vous devez vous connecter pour publier un commentaire.
J'ai toujours ouvrir la db connection dans
onResume()
et le fermer enonPause()
. De cette façon, la base de données est toujours ouverte pour chaque activité.La raison pour laquelle je ne suis pas le faire dans
onCreate()
etonDestroy()
est une fois que l'utilisateur d'aller à d'autres activitésonCreate()
denew activity
sera appelé en premier, puisonDestroy()
de l'activité ancienne et donc, si j'ai effectuer toute opération(ex: rechercher dans ma liste ou la modification du statut de l'utilisateur, etc) sur les lieux, puis d'autresonCreate()
il va se planter l'application avec raisondatabase already closed
.Remarque: Vous devez ouvrir et de fermer la connexion, même si vous utilisez SQLiteHelper classe.
Selon le Android manuel, vous n'avez pas besoin de fermer une base de données lors de l'utilisation d'un SQLiteOpenHelper. Le système va le faire pour vous.
Comme @Dan mentionné ci-dessus, vous n'avez pas besoin d'ouvrir et de fermer la base de données chaque fois que vous effectuez une opération de lecture/écriture si vous utilisez SQLiteOpenHelper. La meilleure façon d'utiliser la base de données est :
1.
Déclarer et initialiser une instance de SQLiteHelper dans votre Application de la classe de base comme ceci :
2.
En activité, ou à tout autre endroit que vous voulez utiliser la DB, initialiser le SQLiteHelper objet comme ceci :
Et puis vous pouvez utiliser la base de données de toute façon vous le voulez sans avoir à vous soucier de l'ouverture et de la fermeture (: