用于在C ++中抽象数据库访问的开源库?

时间:2010-01-21 03:03:00

标签: c++ database

我正在寻找从我的应用程序中抽象出数据库服务器细节的选项(在c ++中),我想编写我的代码以独立于实际的数据库后端。我知道MySQL有一个很好的库,但我不想被绑定到单个数据库实现。对此有好的选择吗?

6 个答案:

答案 0 :(得分:4)

SOCI很好。支持多个数据库,效果很好,现代C ++风格API,可以使用boost。

答案 1 :(得分:4)

我的意见是忘记跨数据库驱动程序,并专注于查找或创建跨数据库数据访问层。一些原因:

  • 复杂查询(读取:任何不是玩具的东西)总是最终使用一个或两个特定于数据库的功能。例如,常用于分页的LIMITOFFSET不是通用的。
  • 迟早你会想要批量插入,并且你希望它尽可能快,因为3小时优于6小时。每个数据库都有不同的“最佳”方式来执行此操作,因此您的DAL无论如何都需要特殊情况。
  • 不同的数据库可能会暴露出不同的约束机制 - 甚至是自定义列类型 - 在可能的情况下值得利用(PostgreSQL很棒)。
  • 如果您想进行任何应用程序级缓存,则无论如何都需要DAL

因此,继续使用libmysql本身 - 只需将其隐藏在DAL中的编译器防火墙后面,并准备稍后将其交换出来。您可以保护自己免受基础设施转移的影响,而无需使用最低公分母的SQL包装器。

如果与您没有关系,请查看SQLAPI++

答案 2 :(得分:1)

许多应用使用odbc(例如通过unixODBC),还有otl。在Windows上,您可以使用托管c ++中的ado.net或旧的ado com接口...

答案 3 :(得分:1)

Qt提供了一个数据库抽象层。请参阅:http://doc.trolltech.com/4.6/qsqldatabase.html

答案 4 :(得分:1)

libodbc++提供了一个非常好的API。 也是大家伙Qt(参见Kyle Lutz的回答)& wxWidgets有数据库抽象层,因此如果你计划使用/你已经在使用这些框架的任何其他部分,那么使用它们可能是个好主意。

答案 5 :(得分:1)

OpenDBXlibzdb是两个轻量级候选人。 Libgda用于GNOME。