I found MySQL pretty straight forward. I wrote this some time ago. It worked on my Mac.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include </usr/local/mysql/include/mysql.h>
#define DBNAME "todd"
#define TBNAME "products"
MYSQL * mysql ;
int do_sql(char * sqltext ) {
if (mysql_query(mysql, sqltext) ) {
fprintf(stderr, "SQL Statement failed: >%s<\nError %d: %s\n",
sqltext, mysql_errno(mysql), mysql_error(mysql) ) ;
return 0 ; // error
}
return 1 ; // all is OK
}
int main (int argc, const char * argv[]) {
int i ;
char create_db[] = "CREATE DATABASE " DBNAME " ; " ;
char create_tb[] = "CREATE TABLE " DBNAME "." TBNAME " ( "
"col1 INTEGER NOT NULL"
") ; " ;
char insert[] = "INSERT INTO " DBNAME "." TBNAME " (col1) values ( %d ) ; " ;
char drop_db[] = "DROP DATABASE " DBNAME " ; " ;
char select[] = "SELECT * FROM " DBNAME "." TBNAME " ORDER BY col1 DESC ; " ;
char temp_stmt[81] ;
MYSQL_RES * result_set ;
MYSQL_ROW row ;
int numcols ; // , numrows ;
mysql = calloc(1, sizeof(MYSQL)) ;
mysql_init(mysql) ;
if (!mysql_real_connect(mysql,"localhost", "root", "changeme", NULL , 0, NULL ,0)) {
fprintf(stderr, "Unable to connect. Error %d: %s\n", mysql_errno(mysql), mysql_error(mysql)) ;
return -1 ;
}
else printf("Connected!\n") ;
// Drop the Database if it exists
if (do_sql(drop_db)) {
printf("Database " DBNAME " dropped!\n") ;
}
// Create the Database
if (!do_sql(create_db)) {
fprintf(stderr, "exiting.\n") ;
return -1 ;
}
else {
printf("Database " DBNAME " created!\n") ;
}
if (!do_sql(create_tb)) {
fprintf(stderr, "exiting.\n") ;
return -1 ;
}
else {
printf("Table " TBNAME " created!\n") ;
}
// Insert into the table a few rows
for (i=0 ; i < 10 ; i++ ) {
sprintf(temp_stmt, insert, i+1) ;
printf("Insert = >%s<\n", temp_stmt) ;
if (!do_sql(temp_stmt)) {
fprintf(stderr, "exiting insert loop...\n") ;
break ;
}
}
printf("Inserted %d rows.\n", i) ;
// Now, select the Rows.
if (!do_sql(select)) {
fprintf(stderr, "exiting.\n") ;
return -1 ;
}
else {
printf("SELECT was OK!\n") ;
}
// Get the handle for the result table
result_set = mysql_use_result(mysql) ;
if (!result_set) {
fprintf(stderr, "use_result failed. Error: %d, %s\n",
mysql_errno(mysql), mysql_error(mysql) ) ;
return -1 ;
}
else {
printf("Use Result worked!\n") ;
}
numcols = mysql_num_fields(result_set) ;
printf("There are %d columns in the result table.\n", numcols );
while ( row = mysql_fetch_row(result_set) ) {
for ( i = 0 ; i < numcols ; i++) {
printf("Row %d value = %s\n", i+1, row[i] );
}
}
return 0;
}