Interface C++ <=> SQL/Firebird, templates types de bases

[Résolu]
Signaler
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016
-
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016
-
Bonjour,

Je souhaiterais créer ou reprendre une interface C++ pour base de donnée générique SQL.=
Je travaille avec une base Firebird. J'aimerais créer des types de base du genre VARCHAR,NULL,INTEGER en utilisant au maximum des templates pour paramétrer ces types de bases.
Mon but est de créer une structure de classes C++ permettant de manipuler facilement des données et de générer automatiquement les requêtes pour tel ou telle base de donnée.
Je ne sais pas si je me fait bien comprendre, j'ai du mal à trouver ce que je cherche sur Internet, signe que je dois pas chercher le bon truc.
Je ne souhaite pas utiliser une API directement, je cherche vraiment à me faire mes classes à moi les plus paramétrables possibles afin de pouvoir générer des requêtes pour Firebird ou autre.
Par exemple pour les VARCHAR, je suis parti sur un truc du genre :
#if defined SQL_FIREBIRD
    #define VARCHAR_SIZE_MAX 4000
#elif defined SQL_MYSQL
    #define VARCHAR_SIZE_MAX 255
#elif
    ...
#endif
template 
class VARCHAR :public QString,public SQL_BasicType
{
    VARCHAR(QString &other):QString(other){//check size of parameter string string...}
    bool isNULL();
    bool wasEdited();
    virtual QString toString();      // for debug
    virtual QString toQueryString(); // for generating SQL query
signals:
    void hasChanged();
private:
    int m_sizemax;
}


La gestion des colonnes et lignes serait à faire dans le même esprit.
Par contre, je n'ai pas trouvé de solution pour gérer tout ce qui est Constraintes du type NOT NULL, PRIMARY KEY (un INTEGER un peu spécial résout le truc je pense), FOREIGN KEY notamment pour les chaînes de charactères contenues dans une autre table...
Bref, j'espère que ce que je dis peux ce comprendre, je souahite globalement faire des class qui gère un peu tous les cas basique trouvé dans une base de donnée et les moyens de générer automatiquementles requêtes SQL adéquates qui vont avec.
J'imagine qu'il y en a qui ont déjà fait des trucs du genre mais je n'ai rien trouvé à l'heure actuelle.
Merci d'avance

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"

2 réponses

Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Bonjour.

Ce que tu veux faire s'appelle un ORM (Object Relational Mapping). Des solutions existent déjà (même pour Qt d'ailleurs).
https://en.wikipedia.org/wiki/List_of_object-relational_mapping_software

Au niveau performance et fonctionnalité, c'est tout de même quelque chose que je déconseille. Il n'y a rien de mieux que d'écrire la requête soi même plutôt que de la cacher derrière un mécanisme qui demande autant d'apprentissage si ce n'est plus...
Par exemple, j'avais gagné énormément en performance en utilisant l'API C "normale" de mysql plutôt que "mysqlpp" qui essayait de faire ce que tu décris (une surcouche qui tentait d'écrire la requête via la manipulation d'objet). Il n'y a rien d'étonnant, puisque pour chaque requête il fallait interpréter les objets et leurs relations pour écrire la requête, ce qui est un processus coûteux.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

Bonjour CptPingu,
Merci pour cette réponse claire et précise.
Je sais quoi chercher maintenant
Sans aller jusqu'à en utiliser un tout fait, qui comme tu le décris, risque de faire baisser les performances, je vais tout de même m'intéresser à comment c'est fait, en trouver un open source, afin d'optimiser mes types de bases, tout ce qui est plus compliqué, je le ferai effectivement à la main. Un bon compromis à mon avis.
Merci encore

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"