A lightweight C++14 wrapper for SQLite that provides a modern, type-safe API with minimal overhead.
sqlite_modern_cpp is a lightweight, header-only C++14 wrapper for the SQLite database library. It provides a modern, type-safe API that simplifies database operations by leveraging C++ features like lambdas, smart pointers, and STL containers, reducing the boilerplate and error-proneness of the raw SQLite C API while maintaining full compatibility and performance.
C++ developers working on projects that require embedded database storage, such as desktop applications, mobile apps (via NDK), or IoT systems, who want a clean, modern interface to SQLite without sacrificing control or performance.
Developers choose sqlite_modern_cpp because it offers a minimal, zero-overhead wrapper that feels native to modern C++, with strong type safety, excellent error handling, and support for advanced features like prepared statements, transactions, and encryption—all without requiring a heavy ORM or runtime dependencies.
The C++14 wrapper around sqlite library
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides compile-time type safety for binding C++ types like int, string, and vector to SQL queries, reducing runtime errors and improving code reliability, as detailed in the binding restrictions.
Uses lambdas for row handling, tuples for multi-column results, and optional/variant for NULL values (C++17), making database code more intuitive and less verbose, as shown in the examples.
Supports reusable prepared statements with explicit execution control, allowing performance gains for complex or repeated queries, as demonstrated in the prepared statements section.
Offers native encryption via sqlcipher_database with configurable keys and rekeying, adding security without external dependencies, as highlighted in the SQLCipher section.
Cannot execute multiple SQL statements separated by semicolons in one operation, requiring workarounds for batch processing or schema setups, as explicitly stated in the README.
Being header-only can significantly increase compilation times in large projects, as all template code is included in each translation unit, impacting build performance.
Lacks high-level abstractions like automatic schema management or object-relational mapping, forcing developers to write more raw SQL and handle database design manually.