2010-04-02 8 views
0

J'ai ce que je considère comme une application iPhone de petite taille qui utilise SQLite.Connexion iPhone SQLite dans un objet de domaine - se ferme chaque fois?

Il existe un objet de domaine singleton qui obtient des données à partir d'une base de données SQLite.

Est-il préférable de créer et d'ouvrir la connexion SQLite pour chaque requête, ou d'ouvrir la BD une seule fois et de la conserver pendant la durée de l'application.

La raison d'être de l'application est l'objet de domaine, donc les autres objets n'auront pas besoin de la base de données.

Répondre

1

Je voudrais généralement aller ouvrir la base de données une seule fois et contenir une référence dans votre objet singleton. Quant à savoir si cela fait une grande différence de performance dépendra de la fréquence à laquelle vous faites des demandes. Si vous demandez des données pour chaque cellule dans un tableauView par exemple, je m'attendrais à ce que l'ouverture de la base de données une seule fois fasse une grande différence. En ouvrant une seule fois, vous pouvez également conserver des références dans votre singleton aux instructions SQL préparées afin de ne pas avoir à les compiler à chaque fois. Chaque fois que vous faites une demande, vérifiez d'abord si l'instruction préparée est déjà compilée. Si ce n'est pas le cas, appelez sqlite3_prepare_v2 pour le compiler et enregistrez l'instruction résultante dans votre singleton.

if (request_stmt == nil) { 
    const char *sql = "SELECT ...... WHERE xxx LIKE ?"; 
    sqlite3_prepare_v2(sqldb, sql, -1, &request_stmt, NULL); 
} 

Vous pouvez libérer ces instructions en appelant sqlite3_finalize lorsque vous publiez votre singleton.