Inhaltsverzeichnis

DB-Objekt in QT4

Brainstorm

Ziel

  1. Design einer Bibliothek, die Datenbank-Objekte (SQL, XLM, LDAP, was auch immer) transparent als C++-Klasse zur Verfügung stellt.
  2. Das Objekt kümmert sich selbst um Anpassung an zugrunde liegendem Datenbank-Type.
  3. Das Objekt kümmert sich automatisch um Ergänzungen/Änderungen der DB-Struktur (Hinzufügen eines neuen Feldes erstellt automatisch ein neues Feld in der DB).
  4. Einfache Entwicklung von Applikationen, die auf Datenbank-Objekte zugreifen (Lesend/löschen/hinzufügen/ändern).
  5. Datenbank-Typen werden soweit möglich automatisch gewählt.

Beispiele

Ganz spontan, was mit so in der Sinn kommt:

// create DB object
DbObbject *person = new DbObject;

// setup object
person->setTable("t_person");
person->addField(DbObject::ShortString, "vorname");
person->addField(DbObject::ShortString, "name");
person->addField(DbObject::Date, "birthday");
person->addField(DbObject::Integer, "num_computers");
person->addField(DbObject::String, "comment");

// query
if(person->query("name", "Meyer")) {
   // print all fields
   qDebug() << person->toString();
   
   // modify object
   person->setValue("comment", "The answer is 23!");
   if(person->commit())
      qDebug() << "Update successfully!";
   else
      qDebug() << "Cannot update Meyer";
}
else
   qDebug() << "Meyer not found";

Mark sagt: Ja das klingt ja schon gar nicht so schlecht! Ich denke auf der Basis können wir los diskutieren. addField war bei mir z.B. eine private Methode und sollte dann, eben nur im Konstuktor der Klasse Person verwendet werden, so dass man bei new Person() dann immer die gleiche Datenstruktur bekommt. (…) (schreibe heute abend weiter …)

Jens sagt: Aha, verstehe, also so ala:

class Person : public DbObject
{
   public:
      Person();
      void doSomePersonStuff();
};

Person::Person()
{
   setTable("t_person");
   addField(DbObject::ShortString, "vorname");
   addField(DbObject::ShortString, "name");
   addField(DbObject::Date, "birthday");
   addField(DbObject::Integer, "num_computers");
   addField(DbObject::String, "comment");
}

Wie hast du bei Dir so Informationen wie z.B. „Datenbank-Type“ und „Datenbank-Verbindung“ hinterlegt? Statische Methoden im Basis-Objekt? Oder anders?