Guide de développement

Local Navigation

Création et suppression de bases de données SQLite

Vous pouvez créer des bases de données temporaires ou permanentes.

Fichiers de bases de données SQLite

Chaque base de données SQLite est stockée dans un seul fichier. Si vous n'indiquez que le nom de la base de données comme valeur du paramètre sur DatabaseFactory.create(), le fichier de base de données est créé dans le stockage par carte multimédia externe. L'emplacement par défaut du fichier de base de données est /SDCard/databases/application_name/. Le nom de l'application qui crée la base de données est inclus dans le chemin par défaut pour éviter toute collision de noms.

Vous ne pouvez pas stocker de base de données SQLite dans le stockage d'application.

Le stockage par carte multimédia externe est l'emplacement de stockage favori des bases de données si le terminal BlackBerry le prend en charge. Sur les terminaux prenant en charge le stockage par carte multimédia externe, vous pouvez créer des bases de données à cet emplacement en indiquant le chemin /SDcard/.

Si votre application est conçue pour stocker votre base de données SQLite dans le stockage multimédia intégré, vous devez déployer votre application pour que le code soit facile à changer pour modifier l'emplacement de stockage de la base de données. Sur les terminaux prenant en charge le stockage multimédia intégré, vous pouvez créer des bases de données à cet emplacement en indiquant le chemin /store/.

Lorsque votre application est supprimée, les bases de données SQLite associées ne sont pas automatiquement supprimées.

À propos des clés primaires

Chaque ligne d'une table SQLite est identifiée de manière unique par un ID de ligne. L'ID de ligne est un nombre entier signé de 64 bits qui identifie de manière unique la ligne. Il est possible d'accéder à l'ID de ligne par les noms ROWID, OID ou _ROWID_ au lieu d'un nom de colonne, à moins que ces noms ne soient utilisés en tant que noms de la colonne explicitement déclarés. Si la table dispose d'une colonne de type INTEGER PRIMARY KEY, le nom de cette colonne est alors un autre alias pour l'ID de ligne.

Lorsqu'une table autorise les insertions simultanées, vous devez garantir que l'ID de ligne correct est renvoyé. Lorsque vous utilisez executeInsert pour exécuter une instruction INSERT, la synchronisation est traitée en code natif et il n'y a pas de problème. Par contre, si vous exécutez une instruction INSERT à l'aide d'une méthode autre que executeInsert, vous devez exécuter l'instruction INSERT et appeler la méthode Database.lastInsertedRowID dans un bloc synchronisé. Le bloc synchronisé doit empêcher les autres instructions INSERT de s'exécuter (et de modifier le dernier ID de ligne inséré).

Pour récupérer les valeurs de nombre entier devant être utilisées comme clés dans une autre requête, vous pouvez utiliser les méthodes Statement.getIntegers et Statement.getLongs. Ces méthodes simplifient et optimisent la récupération de colonnes de nombres entiers. Vous pouvez considérer les valeurs de nombres entiers récupérées comme des clés étrangères, à la différence près qu'elles ne doivent pas faire référence à la clé primaire d'une autre table.

SQLite crée automatiquement des index pour les colonnes avec les contraintes UNIQUE ou PRIMARY KEY.

Application de contraintes de clés étrangères

Si vous utilisez des clés étrangères dans votre base de données, vous pouvez appliquer leur utilisation en définissant l'option foreign_key_constraints dans la classe DatabaseOptions.

Vous pouvez définir l'option foreign_key_constraints lorsque vous créez la base de données. Cependant, pour que les contraintes de clés étrangères soient appliquées, vous devez également définir cette option à chaque fois que vous ouvrez la base de données. L'échantillon de code suivant indique comment appliquer les contraintes de clés étrangères lors de l'ouverture ou de la création d'une base de données.

DatabaseOptions dbo = new DatabaseOptions();
dbo.set("foreign_key_constraints","on");
Database d = DatabaseFactory.openOrCreate("test.db", dbo);

Vous pouvez vérifier si les contraintes de clés étrangères sont activées à l'aide de la méthode DatabaseOptions.foreignKeyConstraintsOn.

Encodage de caractères

Les bases de données SQLite stockent les chaînes de manière interne en UTF-8, tandis que Java les stocke en UTF-16. L'API de base de données traite la conversion de chaînes de manière interne ; tout codage ou conversion est donc inutile.

Le pragma SQLite encoding n'est pas pris en charge dans l'API de base de données ; vous ne pouvez pas définir d'autre codage. Vous devez utiliser des caractères UTF-8 pris en charge dans votre base de données SQLite.

Utilisation de classements linguistiques

Lorsque votre base de données contient des données textuelles dans des langues autres que l'anglais, vous pouvez définir le classement de langue pour que SQLite trie les colonnes et exécute l'indexation correctement. Vous pouvez faire ceci avec l'opérateur COLLATE lorsque vous créez la colonne.

Le classement Standard par défaut fournit de bons résultats pour l'anglais lors d'une utilisation normale et fournit également un ordre correct pour de nombreuses autres langues fréquemment utilisées. Il risque de ne pas fournir des résultats corrects pour certaines langues latines et pour des écritures idéographiques telles que le chinois et le japonais.

Pour plus d'informations à propos de la modification du classement par défaut, rendez-vous sur le site www.unicode.org.

L'extrait de code suivant crée une table dans laquelle le classement selon la langue française est activé sur une colonne appelée a, ce qui suppose que la base de données d est ouverte.

d.executeStatement( "CREATE TABLE t1( a COLLATE french );" );

Les classements en langue étrangère suivants sont pris en charge dans les applications BlackBerry :

  • Standard (par défaut)

  • Afrikaans

  • Arabe

  • Catalan

  • Tchèque

  • Français

  • Hébreu

  • Chinois (Hong-Kong)

  • Hongrois

  • Japonais

  • Coréen

  • Pinyin

  • Polonais

  • Roumain

  • Espagnol

  • Thaï

  • Turc

  • Chinois (Taïwan)


Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.