====== DB-Objekt in QT4 ======
===== Brainstorm =====
==== Ziel ====
- Design einer Bibliothek, die Datenbank-Objekte (SQL, XLM, LDAP, was auch immer) transparent als C++-Klasse zur Verfügung stellt.
- Das Objekt kümmert sich selbst um Anpassung an zugrunde liegendem Datenbank-Type.
- 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).
- Einfache Entwicklung von Applikationen, die auf Datenbank-Objekte zugreifen (Lesend/löschen/hinzufügen/ändern).
- 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?