用于在 C++ 中抽象数据库访问的开源库?
Posted
技术标签:
【中文标题】用于在 C++ 中抽象数据库访问的开源库?【英文标题】:Open source libraries for abstracting database access in C++? 【发布时间】:2010-01-21 03:03:00 【问题描述】:我正在寻找从我的应用程序中抽象出数据库服务器详细信息的选项(在 c++ 中),我想编写我的代码以独立于实际的数据库后端。我知道 mysql 有一个不错的库,但我不想被绑定到单个数据库实现。有什么好的选择吗?
【问题讨论】:
企业数据访问块在 C# 中可用。如果您愿意,您可能会创建一些托管 C++ 包装器。 【参考方案1】:SOCI 很好。支持多个数据库,运行良好,现代 C++ 风格 API,与 boost 一起使用。
【讨论】:
【参考方案2】:我的观点是忘记跨数据库驱动,专注于寻找或创建跨数据库数据访问层。几个原因:
复杂的查询(阅读:任何不是玩具的东西)总是最终使用一两个数据库特定的功能。例如,LIMIT
和 OFFSET
常用于分页,并不通用。
迟早您会需要批量插入,并且希望它尽可能快,因为 3 小时比 6 小时好。每个数据库都有不同的“最佳”方式来执行此操作,因此无论如何您的 DAL 都需要对此进行特殊处理。
不同的数据库可能会公开不同的约束机制——甚至是自定义列类型——值得尽可能利用(PostgreSQL 非常适合这一点)。
如果您想要进行任何应用程序级别的缓存,您将需要一个 DAL无论如何。
所以,继续使用 libmysql
本身 - 只需将其隐藏在 DAL 中的编译器防火墙后面,并准备好稍后将其换掉。您无需使用最低公分母 SQL 包装器即可保护自己免受基础架构变化的影响。
如果您不满意,请查看SQLAPI++。
【讨论】:
【参考方案3】:许多应用程序使用 odbc(例如通过unixODBC),还有otl。在 Windows 上,您可以使用托管 c++ 或旧 ado com 接口中的 ado.net...
【讨论】:
【参考方案4】:Qt 提供了一个数据库抽象层。请参阅:http://doc.trolltech.com/4.6/qsqldatabase.html。
【讨论】:
【参考方案5】:libodbc++ 提供了一个非常好的 API。 还有大家伙Qt(参见 Kyle Lutz 的回答)和wxWidgets 有 db 抽象层,所以如果你打算使用/你已经在使用这些框架的任何其他部分,使用它们可能是个好主意.
【讨论】:
【参考方案6】:OpenDBX 和 libzdb 是两个轻量级候选者。 Libgda 代表 GNOME。
【讨论】:
哇 8 年后,我想这对我来说可能是个人最好的 =D 谢谢!以上是关于用于在 C++ 中抽象数据库访问的开源库?的主要内容,如果未能解决你的问题,请参考以下文章