2010-01-21 23 views
5

Estoy buscando opciones para abstraer los detalles del servidor de la base de datos lejos de mi aplicación (en C++), me gustaría escribir mi código para que sea independiente del back-end de la base de datos real. Sé que MySQL tiene una buena biblioteca, pero no quiero estar atada a una sola implementación de base de datos. ¿Hay buenas opciones para esto?¿Bibliotecas de código abierto para abstraer el acceso a la base de datos en C++?

+0

El bloque de acceso a datos empresariales está disponible en C#. Probablemente podrías haber creado algunos contenedores administrados de C++ si esa es una opción para ti. –

Respuesta

1

muchas aplicaciones usan odbc (a través de unixODBC por ejemplo), también hay otl. en Windows podría usar ado.net desde C++ administrado o las viejas interfaces de ado com ...

4

SOCI es bueno. Admite múltiples bases de datos, funciona bien, API moderna de estilo C++, funciona con boost.

1

libodbc++ proporciona una muy buena API. También los chicos grandes Qt (vea la respuesta de Kyle Lutz) & wxWidgets tienen capas de abstracción db, por lo que puede ser una buena idea usarlas si va a utilizar/ya está usando otras partes de esos marcos.

4

Mi opinión es que se olvide de un controlador de base de datos cruzada y se concentre en buscar o crear una capa de acceso a datos entre bases de datos. Algunos aspectos:

  • Las consultas complejas (léase: cualquier cosa que no sea un juguete) invariablemente terminan usando una o dos características específicas de la base de datos. LIMIT y OFFSET por ejemplo, comúnmente utilizado para paginación, no es universal.
  • Tarde o temprano querrá la inserción masiva, y querrá que sea lo más rápido posible, porque 3 horas es mejor que 6 horas. Cada base de datos tiene una forma diferente y "óptima" de hacer esto, por lo que su DAL necesitará casos especiales de todos modos.
  • Diferentes bases de datos pueden exponer diferentes mecanismos de restricción — incluso columnas personalizadas tipos — que pueden valer la pena aprovechar en la medida de lo posible (PostgreSQL es maravilloso para esto).
  • Si desea hacer un almacenamiento en caché a nivel de aplicación, necesitará un DAL de todos modos.

Por lo tanto, siga adelante y use libmysql por sí mismo, simplemente escóndelo detrás de un compilador de firewall en su DAL, y prepárese para cambiarlo más tarde. Puede protegerse de una infraestructura cambiante sin tener que usar un envoltorio de SQL de denominador común más bajo.

Si eso no concuerda contigo, echa un vistazo a SQLAPI++.

Cuestiones relacionadas