用于在 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】:

我的观点是忘记跨数据库驱动,专注于寻找或创建跨数据库数据访问层。几个原因:

复杂的查询(阅读:任何不是玩具的东西)总是最终使用一两个数据库特定的功能。例如,LIMITOFFSET 常用于分页,并不通用。 迟早您会需要批量插入,并且希望它尽可能快,因为 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++ 中抽象数据库访问的开源库?的主要内容,如果未能解决你的问题,请参考以下文章

用于 C++ 的开源、跨平台 CD/DVD 录制库 [关闭]

用于 C++ 抽象语法树组合和代码生成的库 [关闭]

C++ 线程安全对象缓存的设计选项

C++开源序列化库:FStruct

C++开源序列化库:FStruct

C++开源序列化库:FStruct