Je voudrais trouver un bon wrapper C ++ orienté objet (par opposition à C) pour sqlite. Que recommandent les gens? Si vous avez plusieurs suggestions, veuillez les inclure dans des réponses séparées aux fins du vote. Indiquez également si vous avez une expérience de l'emballage que vous suggérez et comment vous l'avez trouvée.
Réponses
Trop de publicités?SOCI est un autre bon encapsuleur pour les bases de données en C ++. Ce n'est pas très OO, mais le C ++ plus moderne.
Il supporte Oracle, PostgreSQL et MySQL. Un backend SQLite est dans le CVS .
En voici un qui n’a pas été mis à jour depuis longtemps, mais est compilé et fonctionne sous Mac OS GCC 4.3. Il est également publié sous licence MIT, vous pouvez donc l'utiliser dans un projet commercial, sans problème. http://code.google.com/p/sqlite3pp/
L'usage est boosté et très propre:
sqlite3pp::database db("test.db");
sqlite3pp::transaction xct(db);
{
sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)");
cmd.bind(":user", "Mike");
cmd.bind(":phone", "555-1234");
cmd.execute();
}
xct.rollback();
Aussi je n'étais pas heureux avec ce que j'ai pu trouver. Maintenant, vous pouvez écrire:
class Person {
public:
Person() {}
static SqlTable<Person>& table() {
static SqlTable<Person> tab = SqlTable<Person>::sqlTable("Person",
SqlColumn<Person>("Firstname", makeAttr(&Reservation::firstname)),
SqlColumn<Person>("Lastname", makeAttr(&Reservation::lastname)),
SqlColumn<Person>("Age", makeAttr(&Reservation::age)),
return tab;
}
std::string firstname;
std::string lastname;
int age;
};
SqliteDB db("testtable.db");
auto sel(db.select<Person>("Firstname=\"Danny\" and Lastname=\"Zeckzer\""));
std::for_each(sel.first, sel.second, [](const Person& p) {
...
Person me;
db.insert<Person>(me);
...
std::vector<Person> everybody;
db.insert<Person>(everybody.begin(), everybody.end());
Le tableau de la méthode est tout ce que vous devez écrire aussi longtemps que vous vous en tenez à la sqlite3 types de données. Comme tout est un modèle pas beaucoup de la couche d'abstraction de code reste de l'après-O. les jointures Naturelles nécessitent un résultat classe similaire à la classe Personne. La mise en œuvre est d'une seule tête avec moins de 500 lignes. Licence LGPL. Source