How can we connect/access databases using C/C++ ?
There are no standard libraries in C or C++ for handling Databases. However, each of the database system comes with their own libraries for C and C++, and there are numerous libraries available which can enable you to write cross-platform database applications. Also, most of the modern compilers provide libraries to have easy connectivity to most of the popular database systems.
DBMS Libraries for C
MySQL provides C language APIs for communicating with MySQL databases. These APIs are platform independant and comes with the MySQL setup package. For more information on how to use these APIs, read their reference manual which can be found at:http://dev.mysql.com/doc/refman/5.0/en/c.html∞
DBMS Libraries for C++
SOCI is an open-source database access library for C++ which can be used with MCVC++ and GCC compilers. This library lets you embed the SQL queries in C++ code using the regular C++ code style. It supports Oracle, MySQL and PostgreSQL databases. You can find documentation, examples∞
, and more information from their project website∞
SQLAP++ provides C++ APIs which can be used to access different databases, such as Oracle, SQL Server, DB2, Sybase, Informix, InterBase, SQLBase, MySQL, PostgreSQL and ODBC. You can find more information and links to download the library from: http://www.sqlapi.com/∞
MySQL++ provides C++ wrapper classes for C API's of MySQL database. More information can be found on their website at:
is a platform independent database library. It covers the functionality of a whole database API with just a handful of concrete classes and several template PL/SQL (Oracle) table container classes. The OTL code gets expanded into direct database API function calls, so it provides ultimate performance, reliability and thread safety in multi-processor environments as well as traditional batch programs. It supports Oracle 7 (natively via OCI7), Oracle 8 (natively via OCI8), Oracle 8i (natively via OCI8i), Oracle 9i (natively via OCI9i), Oracle 10g (natively via OCI10g), DB2 (natively via DB2 CLI), ODBC 3.x as well as ODBC 2.5 compliant data sources in MS Windows and Unix (e.g. Oracle, MS SQL Server, Sybase, Informix, MySQL
, DB2, Interbase / Firebird, PostgreSQL
, SQLite, SAP/DB, TimesTen
, MS ACCESS, etc.). The list of supported database backends is constantly growing.
Below is an example of connecting and querying an MySQL
Database, courtesy: Delbrooks's∞
post in C community thread∞
/*The MySQL library header file*/
/*#define the database details such as the host, the username, the password, and the database to connect to*/
#define host "localhost"
#define username "root"
#define password "123456"
#define database "testdb"
/*You will have to change the values in the quotes to match the values that fit your database details. */
/*The next line creates a pointer of type MYSQL to the active database connection:*/
/*Followed by that, we tell mySQL that are are about to connect with the mysql_init() function.
We pass a value of NULL to it because for our purposes, we don't need to go into it any further:*/
conn = mysql_init(NULL)
conn == NULL )
printf("Failed to initate MySQL\n")
/*The next step is to actually connect to the database. This is where the conn variable and the host,
username, password, and database #define's are used:*/
printf( "Error connecting to database: %s\n"
/*Finally, we query the database with the following query using the mysql_query() function: "SELECT * FROM users" like so:*/
conn,"SELECT name, email, password FROM users")
/*After querying the result, we need to store the result data in the variable res_set we defined earlier. This is done like so:*/
res_set = mysql_store_result(
/*In our example, there will most likely be more than one row returned (i.e., if there are more than one user in
the users table of the database). If so, then you need to find how many rows are returned so that you can
loop through each one and print the result of each one like so:*/
numrows = mysql_num_rows(
num_fields = mysql_num_fields(
/*Finally, we retrive the result using the function mysql_fetch_row() and then print out all of the data in large chunks.
This is done like so:*/
row = mysql_fetch_row(
i = 0
; i < num_fields; i++)
/*Last but certainly not least, we close our connection to the database*/
Here is an MSDN link on how to connect to an Oracle database using VC++:
Below is an example code on how to connect to Sybase using C on UNIX flavors:
/* Anyone who understands this code, please edit this page and add comments*/
dbcmd(dbproc,"select * from table");
Connecting to Database using Turbo C/C++
If you have a 16 bit compiler like Turbo C/C++ for DOS, then you have no way to access any database as there are no libraries supporting that compiler. You will need to upgrade to newer and modern compilers like MSVC++ or GCC. See our Free compilers section
to find and download compilers..
ODBC from C Tutorial∞