Intéressant

Programmation de SQLite en C Deuxième tutoriel

Programmation de SQLite en C Deuxième tutoriel


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Ce tutoriel est le deuxième d'une série sur la programmation de SQLite en C.

SQLite stocke une collection de tables dans une base de données unique, se terminant généralement par .db. Chaque tableau est comme une feuille de calcul, il se compose de plusieurs colonnes et chaque ligne a des valeurs.

Si cela vous aide, considérez chaque ligne comme une structure, les colonnes de la table correspondant aux champs de la structure.

Une table peut avoir autant de lignes que son contenu sur un disque. Il y a une limite supérieure mais son énorme 18 446 744 073 709 551 616 pour être précis.

Un tableau peut contenir jusqu'à 2 000 colonnes ou, si vous recompilez le source, vous pouvez atteindre un maximum de 32 767 colonnes.

L'API SQLite

Pour utiliser SQLite, nous devons faire des appels à l'API. Vous pouvez trouver une introduction à cette API sur la page Web officielle Introduction à l'interface SQLite C / C ++. C'est un ensemble de fonctions faciles à utiliser.

Premièrement, nous avons besoin d’un descriptif de la base de données. C'est de type sqlite3 et est renvoyé par un appel à sqlite3_open (nomfichier, ** ppDB). Après cela, nous exécutons le SQL.

Commençons par une légère digression et créons une base de données utilisable et quelques tables en utilisant SQLiteSpy. (Voir le tutoriel précédent pour des liens vers cela et le navigateur de base de données SQLite).

Événements et lieux

La base de données about.DB tiendra trois tables pour gérer des événements sur plusieurs sites. Ces événements seront des fêtes, des discos et des concerts et se dérouleront sur cinq sites (alpha, beta, charlie, delta et echo). Lorsque vous modélisez quelque chose comme cela, il est souvent utile de commencer avec un tableur. Par souci de simplicité, je vais simplement stocker une date et non une heure.

La feuille de calcul comporte trois colonnes: dates, lieu, type d’événement et environ dix événements de ce type. Les dates vont du 21 au 30 juin 2013.

SQLite n'a pas de type de date explicite, il est donc plus facile et plus rapide de le stocker en tant qu'int. De la même manière qu'Excel utilise les dates (jours depuis le 1er janvier 1900), elles ont les valeurs int 41446 à 41455. Si vous placez les dates dans un tableur puis formatez la colonne de date en tant que nombre avec 0 décimale, cela ressemble à ceci:

Nous pourrions maintenant stocker ces données dans une seule table et, pour un exemple aussi simple, ce serait probablement acceptable. Cependant, une bonne pratique en matière de conception de base de données nécessite une certaine normalisation.

Les éléments de données uniques, tels que le type de site, doivent figurer dans sa propre table et les types d'événement (fête, etc.) doivent également figurer dans un. Enfin, comme nous pouvons avoir plusieurs types d’événements sur plusieurs sites (relations multiples à multiples), nous avons besoin d’une troisième table pour les contenir.

Les trois tables sont:

  • sites - contient les cinq sites
  • eventtypes - contient les trois types d'événements
  • events - contient la date, l'identifiant du lieu et le type d'événement. J'ai également ajouté un champ de description pour cet événement, par exemple "Anniversaire de Jim".

Les deux premières tables contiennent les types de données afin que les sites aient des noms alpha pour écho. J'ai également ajouté un identifiant entier et créé un index pour cela. Avec le petit nombre de sites (5) et de types d'événements (3), cela pourrait se faire sans index, mais avec des tables plus grandes, cela deviendrait très lent. Donc, toute colonne susceptible d’être recherchée ajoute un index, de préférence un entier

Le SQL pour créer ceci est:

L'index de la table des événements a la date, id-event, le type d'événement et le lieu. Cela signifie que nous pouvons interroger la table des événements pour "tous les événements à une date", "tous les événements sur un lieu", "toutes les parties", etc. et des combinaisons de ceux-ci, tels que "toutes les parties sur un lieu", etc.

Après avoir exécuté les requêtes de création de table SQL, les trois tables sont créées. Notez que j'ai mis tout ce sql dans le fichier texte create.sql et qu'il contient des données permettant de renseigner certaines des trois tables.

Si vous mettez; comme je l’ai fait dans create.sql, vous pouvez regrouper et exécuter toutes les commandes en une fois. Sans le ; vous devez exécuter chacun d'eux par lui-même. Dans SQLiteSpy, cliquez simplement sur F9 pour tout exécuter.

J'ai également inclus SQL pour supprimer les trois tableaux dans les commentaires multi-lignes en utilisant / *… * / comme en C. Sélectionnez simplement les trois lignes et utilisez les touches ctrl + F9 pour exécuter le texte sélectionné.

Ces commandes insèrent les cinq sites:

Encore une fois, j'ai inclus du texte commenté dans des tableaux vides, avec le supprimer de lignes. Il n'y a pas d'annulation alors soyez prudent avec ceux-ci!

Étonnamment, avec toutes les données chargées (certes pas beaucoup), l'ensemble du fichier de base de données sur disque ne représente que 7 Ko.

Données d'événement

Plutôt que de constituer un ensemble de dix instructions d'insertion, j'ai utilisé Excel pour créer un fichier .csv pour les données d'événement, puis un utilitaire de ligne de commande SQLite3 (fourni avec SQLite) et les commandes suivantes pour l'importer.

Remarque: toute ligne avec un préfixe point (.) Est une commande. Utilisez .help pour afficher toutes les commandes. Pour exécuter SQL, il suffit de le taper sans préfixe de période.

Vous devez utiliser une double barre oblique noire dans le chemin d'importation pour chaque dossier. Ne faites que la dernière ligne après l’importation de .import. Lorsque SQLite3 exécute le séparateur par défaut est un: il doit donc être remplacé par une virgule avant l'importation.

Retour au code

Maintenant que nous avons une base de données entièrement remplie, écrivons le code C pour exécuter cette requête SQL qui renvoie une liste de parties, avec une description, des dates et des lieux.

  • Nouveau pour SQL? Lire Qu'est-ce que SQL?

Cela fait une jointure en utilisant la colonne idvenue entre les tables events et meetings afin que nous obtenions le nom du lieu et non sa valeur int idvenue.

Fonctions de l'API SQLite C

Il y a beaucoup de fonctions mais nous n’en avons besoin que d’une poignée. L'ordre de traitement est le suivant:

  1. Ouvrez la base de données avec sqlite3_open (), quittez si une erreur s'est produite lors de son ouverture.
  2. Préparer le SQL avec sqlite3_prepare ()
  3. Boucle en utilisant slqite3_step () jusqu'à ce qu'il n'y ait plus d'enregistrements
  4. (Dans la boucle) traite chaque colonne avec sqlite3_column…
  5. Enfin, appelez sqlite3_close (db)

Après l’appel de sqlite3_prepare, il existe une étape facultative, dans laquelle tous les paramètres transmis sont liés, mais nous les conservons pour un prochain tutoriel.

Ainsi, dans le programme indiqué ci-dessous, le pseudo-code des principales étapes est le suivant:

SQL renvoie trois valeurs. Par conséquent, si sqlite3.step () == SQLITE_ROW, les valeurs sont copiées à partir des types de colonne appropriés. J'ai utilisé int et text. J'affiche la date sous forme de nombre, mais n'hésitez pas à la convertir en date.

Liste des exemples de code


Video, Sitemap-Video, Sitemap-Videos