Partager via


Configuration de SQLite dans Xamarin.iOS

Pour utiliser SQLite dans votre application Xamarin.iOS, vous devez déterminer l’emplacement de fichier approprié pour votre fichier de base de données.

Chemin du fichier de base de données

Quelle que soit la méthode d’accès aux données que vous utilisez, vous devez créer un fichier de base de données pour que les données puissent être stockées avec SQLite. Selon la plateforme que vous ciblez, l’emplacement du fichier sera différent. Pour iOS, vous pouvez utiliser la classe Environment pour construire un chemin d’accès valide, comme indiqué dans l’extrait de code suivant :

string dbPath = Path.Combine (
        Environment.GetFolderPath (Environment.SpecialFolder.Personal),
        "database.db3");
// dbPath contains a valid file path for the database file to be stored

Il existe d’autres éléments à prendre en compte lorsque vous décidez où stocker le fichier de base de données. Sur iOS, vous souhaiterez peut-être que la base de données soit sauvegardée automatiquement (ou non).

Si vous souhaitez utiliser un emplacement différent sur chaque plateforme dans votre application multiplateforme, vous pouvez utiliser une directive de compilateur comme indiqué pour générer un chemin d’accès différent pour chaque plateforme :

var sqliteFilename = "MyDatabase.db3";
#if __ANDROID__
// Just use whatever directory SpecialFolder.Personal returns
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); ;
#else
// we need to put in /Library/ on iOS5.1+ to meet Apple's iCloud terms
// (they don't want non-user-generated data in Documents)
string documentsPath = Environment.GetFolderPath (Environment.SpecialFolder.Personal); // Documents folder
string libraryPath = Path.Combine (documentsPath, "..", "Library"); // Library folder instead
#endif
var path = Path.Combine (libraryPath, sqliteFilename);

Pour plus d’informations sur les emplacements de fichiers à utiliser sur iOS, consultez l’article Utilisation du système de fichiers. Pour plus d’informations sur l’utilisation des directives du compilateur pour écrire du code spécifique à chaque plateforme, consultez le document Création d’applications multiplateformes .

Thread

Vous ne devez pas utiliser la même connexion de base de données SQLite sur plusieurs threads. Veillez à ouvrir, utiliser, puis fermer toutes les connexions que vous créez sur le même thread.

Pour vous assurer que votre code ne tente pas d’accéder à la base de données SQLite à partir de plusieurs threads en même temps, prenez manuellement un verrou chaque fois que vous allez accéder à la base de données, comme suit :

object locker = new object(); // class level private field
// rest of class code
lock (locker){
    // Do your query or insert here
}

Tous les accès à la base de données (lectures, écritures, mises à jour, etc.) doivent être encapsulés avec le même verrou. Il faut veiller à éviter une situation d’interblocage en veillant à ce que le travail à l’intérieur de la clause de verrouillage reste simple et ne fasse pas appel à d’autres méthodes qui peuvent également prendre un verrou!