Открытые исходные библиотеки для абстрагирования доступа к базе данных в C ++? - PullRequest
5 голосов
/ 21 января 2010

Я ищу варианты абстрагирования подробностей о сервере базы данных от моего приложения (на языке c ++), я хотел бы написать свой код, чтобы он не зависел от фактического сервера базы данных. Я знаю, что в MySQL есть хорошая библиотека, но я не хочу быть привязанным к одной реализации базы данных. Есть ли хорошие варианты для этого?

Ответы [ 6 ]

4 голосов
/ 22 января 2010

Мое мнение - забыть о драйвере между базами данных и сосредоточиться на поиске или создании уровня доступа к данным между базами данных. Несколько причин:

  • Сложные запросы (читай: все, что не является игрушкой) неизменно заканчиваются использованием одной или двух специфичных для базы данных функций. Например, LIMIT и OFFSET, обычно используемые для подкачки страниц, не универсальны.
  • Рано или поздно вам понадобится массовая вставка, и вы захотите, чтобы это было как можно быстрее, потому что 3 часа лучше, чем 6 часов. У каждой базы данных есть свой «оптимальный» способ сделать это, поэтому ваш DAL все равно будет нуждаться в особом случае.
  • Разные базы данных могут предоставлять разные механизмы ограничений - даже пользовательские типы столбцов - которые могут быть полезны, когда это возможно (PostgreSQL отлично подходит для этого).
  • Если вы хотите выполнять кэширование любого уровня приложения, вам понадобится DAL в любом случае .

Итак, продолжайте и сами используйте libmysql - просто спрячьте его за брандмауэром компилятора в вашем DAL и будьте готовы поменять его позже. Вы можете защитить себя от изменения инфраструктуры без использования оболочки SQL с наименьшим общим знаменателем.

Если это не с вами, проверьте SQLAPI ++ .

4 голосов
/ 21 января 2010

SOCI - это хорошо. Поддерживает несколько баз данных, хорошо работает, современный API в стиле C ++, работает с boost.

1 голос
/ 26 июля 2018

OpenDBX и libzdb - два легких кандидата. Libgda для GNOME.

1 голос
/ 21 января 2010

libodbc ++ предоставляет довольно хороший API. Также у больших парней Qt (см. Ответ Кайла Латса) и wxWidgets есть слои абстракции БД, поэтому может быть хорошей идеей использовать их, если вы планируете использовать / вы уже используя любые другие части этих структур.

1 голос
/ 21 января 2010

Qt предоставляет уровень абстракции базы данных. Смотри: http://doc.trolltech.com/4.6/qsqldatabase.html.

1 голос
/ 21 января 2010

многие приложения используют odbc (например, через unixODBC ), также есть otl . в Windows вы можете использовать ado.net из управляемого c ++ или старых интерфейсов ado com ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...