我正在寻找将数据库服务器细节抽象化处理的选项,以使我的应用程序(使用c++编写)可以独立于实际的数据库后端而存在。我知道MySQL有一个很好的库,但我不想被限制在单一的数据库实现上。是否有更好的选择呢?
我的意见是放弃跨数据库驱动程序的想法,专注于查找或创建跨数据库数据访问层。原因如下: 复杂查询(即任何不是玩具的东西)总会使用一个或两个特定于数据库的功能。例如,用于分页的LIMIT和OFFSET并非普遍存在。 早晚你会想要进行批量插入,并希望它尽可能快,因为3小时比6小时好。每个数据库都有不同的“最佳”方法来实现这一点,因此您的数据访问层(DAL)将需要对此进行特殊处理。 不同的数据库可能会公开不同的约束机制——甚至是自定义列类型——如果可能的话可以利用(PostgreSQL非常适合此项工作)。 如果您想要进行任何应用程序级缓存,您将需要一个DAL。 因此,继续使用libmysql本身——只需在DAL中隐藏它,准备随时更换。您可以在不使用最低公共分母SQL包装器的情况下保护自己免受基础架构的变化影响。 如果这不符合您的要求,请查看SQLAPI++。
libodbc++提供了一个相当不错的API。 此外,大公司Qt(请参见Kyle Lutz的答案)和wxWidgets都有数据库抽象层,因此如果您计划使用/已经使用这些框架的任何其他部分,使用它们可能是个好主意。