Académique Documents
Professionnel Documents
Culture Documents
Intro C++ Et Bases de Données Sous QT 2019 PDF
Intro C++ Et Bases de Données Sous QT 2019 PDF
1. Introduction
Prérequis :
Pour réaliser des applications avec Bases de données, on doit utiliser le module
QtSql. Le module QtSql fournit une interface de gestion indépendante de Bases
de Données relationnelles. Cette interface est soutenue par un ensemble de
classes utilisant l’architecture MVC (Modèle-Vue-Controleur) qui assurent une
bonne convivialité pour l’interface utilisateur.
Avant toute chose il faut modifier le fichier .pro pour que les classes d'accès
aux données soient accessibles. Pour ce faire il suffit d'ajouter la ligne suivante
au fichier .pro :
QT+=sql
QMYSQL MySQL
Exemple : MySQL
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("toto");
db.setUserName("root");
db.setHostName("localhost");
db.setPassword("");
if(db.open())
qDebug() << "Ouverture de la base de données avec succès";
else qDebug() << "Echec d'ouverture de la base de données";
Procédure :
Exemple : une requête récupérant le montant des TVA possible dans la table
tva :
QSqlQuery query("SELECT montant_tva FROM tva;");
if(query.exec())
qDebug() << "Ouverture de la base de données avec succès";
else qDebug() << "Echec d'ouverture de la base de
données";
Durant le parcours des enregistrements, on peut avoir accès aux champs d’un
enregistrement en faisant :
Exemple
while (query.next() )
{
//on recupere title sous forme de QString
QString title = query.value(0).toString();
//on récupère year sous forme d’entier
int year = query.value(1).toInt();
// traitement des valeurs
………………………………
}
Exemple
Une variable bind est une variable comme une autre mis à part qu'elle est
présente directement dans la requête SQL et qu’on va lui associer une variable
applicative.
Raisons de lisibilité
Raisons d'optimisation
Raisons de sécurité : éviter les attaques de type « injections SQL »
Une requête préparée est une requête comme une autre, sauf qu'au lieu de
mettre directement les valeurs, on va mettre des marqueurs (? ou un marqueur
nominatif), et les remplacer plus tard. Ainsi, la requête sera réutilisable pour
différentes valeurs.
Pour en créer une, on utilise toujours l'objet QSqlQuery. La fonction QSqlQuery
::prepare() prédispose la requête SQL à l'exécution, elle permet de construire des
requêtes contenant des éléments variables. Cette fonction renvoie un booléen pour
confirmer ou non la préparation de la requête.
Exemple :
QSqlQuery q;
//Marqueurs ?
q.prepare("UPDATE matable SET monchamp1=?, monchamp2=?");
q.addBindValue("Coucou");
q.addBindValue(42);
//Marqueurs nominatifs
q.prepare("UPDATE matable SET monchamp1=:premierevaleur,
monchamp2=:deuxiemevaleur");
q.bindValue(":premierevaleur", "Coucou");
q.bindValue(":deuxiemevaleur", 42);