什么是一个很好的OO C ++包装的SQLite

我想为sqlitefind一个好的面向对象的C ++(而不是C)包装器。 人们推荐什么? 如果你有几个build议,请把它们分别用于投票。 另外,请说明您是否有任何关于您build议的包装的经验,以及您是如何使用的。

这真的是邀请反对票,但是这里…

我直接从C ++使用sqlite,并没有看到任何增加C + +抽象层的价值。 这是相当好(和高效)。

另一个对C ++数据库的封装是SOCI 。 这不是很OO,但更现代的C + +。

它支持Oracle,PostgreSQL和MySQL。 SQLite后端在CVS中 。

这是一段时间没有更新,但编译和运行在Mac OS GCC 4.3。 它也是根据MIT许可证发布的,所以你可以在商业项目中使用它,没有问题。 http://code.google.com/p/sqlite3pp/

用法是提升,非常干净:

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(); 

请参阅: http : //code.google.com/p/sqlite3pp/wiki/UsagePage

使用Qt – 它对SQLite有很好的约束力,可以很好地融入到它的整体devise中

我也不满意我能find的东西。 现在你可以写:

 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()); 

只要你坚持使用sqlite3数据types,表格方法就是你需要编写的所有东西。 因为一切都是一个模板,所以在-O之后没有太多的抽象层代码。 自然连接需要类似于Person类的结果类。 实现是一个less于500行的单头。 许可证是LGPL。 资源

我也不满意任何我能find的,所以我写了我自己的: sqlite3cc 。

这是一个代码示例:

 sqlite::connection db( filename ); sqlite::command c( db, "UPDATE foo SET bar = ? WHERE name = ?" ); c << 123 << name << sqlite::exec; sqlite::query q( db, "SELECT foo FROM bar" ); for( sqlite::query::iterator i = q.begin(); i != q.end(); i++ ) std::cout << i->column< std::string >( 0 ) << "\n"; 

我阅读这篇文章,并尝试了答案中提到的一些库,
但是没有一个对我来说很简单(我是一个懒惰的程序员!)。

所以我写了自己的包装: sqlite modern cpp

 database db("dbfile.db"); // executes the query and creates a 'user' table if not exists db << "create table if not exists user (" " age int," " name text," " weight real" ");"; // inserts a new user and binds the values to '?' marks db << "insert into user (age,name,weight) values (?,?,?);" << 20 << "bob" << 83.0; // slects from table user on a condition ( age > 18 ) and executes // the lambda for every row returned . db << "select age,name,weight from user where age > ? ;" << 18 >> [&](int age, string name, double weight) { cout << age << ' ' << name << ' ' << weight << endl; }; // selects the count(*) of table user int count = 0; db << "select count(*) from user" >> count; 

玩的开心 !

http://www.codeproject.com/KB/database/CppSQLite.aspx是太棒了,它是很容易移植,我有它在半小时左右工作bcb5(omg)。; 它是尽可能薄,你可以得到和易于理解。 有大量的例子涵盖了你需要知道的每一件事情。 它使用exception来处理错误 – 我修改它以在几分钟内提供返回码。 唯一棘手的问题是创build自己的lib文件没有提供。

 try { CppSQLite3DB db; db.open(asFileName.c_str()); db.execDML("Update data set hrx = 0"); } // try catch (...) { } // catch 

不能比这更简单…..

每个人都对使用什么给出了很好的build议:我会告诉你什么仪器使用。

LiteSQL 。

我的经验是可怕的。
我只是在做什么ORM使用的研究,我正在testing很多。

弱点:

  • 没有文件
  • 没有说明性的README
  • 没有先决条件的解释
  • 由于很多bug (不是真的,在v0.3.17中没有修复)

也许你可以看看

http://pocoproject.org

要么

白金C + +框架

另一个简单的是NLDatabase 。 免责声明:我是作者。 基本的用法(说实话,你不会比这个“基本”更多)看起来像这样:

 #include "NLDatabase.h" using namespace std; using namespace NL::DB; int main(int argc, const char * argv[]) { Database db( "test.sqlite" ); auto results = db.query("SELECT * FROM test WHERE name <> ?").select("TOM"); for ( auto const & row : results ) { cout << "column[0]=" << row.column_string( 0 ) << endl; } } 

为了好玩,打开一个数据库,运行一个查询,并在一行中获取结果:

 for ( auto & row : Database( "test.sqlite" ).query( "SELECT * FROM test").select() ) { cout << row.column_string( 0 ) << endl; } 

我做了一个,因为我们公司的需要。 https://www.github.com/rubdos/libsqlitepp这是C + + 11,只有头。 只需将标题放在项目中,包含它并链接到C的sqlite库。

例子应该在那个git回购的地方,相当容易使用。

Oracle / OCI / ODBC模板库

这个图书馆是辉煌的。

http://www.sqlapi.com/

有可用的Windows和Linux版本的库,我在几分钟内启动并运行。

你已经成功移植它为mingw-3.4.5? 你会分享移植版本吗?

谢谢。

http://www.codeproject.com/KB/database/CppSQLite.aspx是太棒了,它是很容易移植,我有它在半小时左右工作bcb5(omg)。; 它是尽可能薄,你可以得到和易于理解。 有大量的例子涵盖了你需要知道的每一件事情。 它使用exception来处理错误 – 我修改它以在几分钟内提供返回码。 唯一棘手的问题是创build自己的lib文件没有提供。