How to Manipulate Data of MySQL Tables on Mac OS X

Published on February 27, 2011 by Amir Sedighi

I was looking for a tutorial to fetch data from MySQL on Mac OS X or Linux flavors. This helped me. I just modified it a bit. After saving the following code as myclient.c:

/*
 See url for more info:

http://www.cyberciti.biz/tips/linux-unix-connect-mysql-c-api-program.html

 */
#include
#include 

#define Q1 "insert into test (a , b) values (? , ?)"

int main(void) {
	MYSQL *conn;
	MYSQL_RES *res;
	MYSQL_ROW row;
	/* Change me */
	char *server = "localhost";
	char *user = "root";
	char *password = "";
	char *database = "SALESMANAGER";
	int i=0;
	conn = mysql_init(NULL);

	/* Connect to database */
	if (!mysql_real_connect(conn, server,
							user, password, database, 0, NULL, 0)) {
		fprintf(stderr, "%s\n", mysql_error(conn));
		exit(1);
	}

	/* send SQL query */
	if (mysql_query(conn, "select * from countries")) {
		fprintf(stderr, "%s\n", mysql_error(conn));
		exit(1);
	}

	res = mysql_use_result(conn);

	/* output table name */
	printf("Result:\n");
	while ((row = mysql_fetch_row(res)) != NULL){
		for(i=0;i<mysql_num_fields(res);i++){
			printf("%s \t", row[i]);
		}
		printf("\n");
	}

	/*  INSERTING USING PREPARED STATEMENT */

	MYSQL_STMT *s1;
	MYSQL_BIND b1[2];
	long testint1=0;
	long testint2=0;
	int ii;

	s1=mysql_stmt_init(conn);
	if (!s1)
	{
		fprintf(stderr, " mysql_stmt_init(), out of memory\n");
		exit(-1);
	}

	memset(b1, 0, sizeof(b1));
	b1[0].buffer_type=MYSQL_TYPE_LONG;
	b1[0].buffer=(void *) &testint1;

	b1[1].buffer_type=MYSQL_TYPE_LONG;
	b1[1].buffer=(void *) &testint2;

	if (mysql_stmt_prepare(s1, Q1, strlen(Q1)))
	{
		fprintf(stderr, " mysql_stmt_prepare(), 1 INSERT failed\n");
		fprintf(stderr, " %s\n", mysql_stmt_error(s1));
		exit(0);
	}
	if (mysql_stmt_bind_param(s1, b1))
	{
		fprintf(stderr, " mysql_stmt_bind_param() failed\n");
		fprintf(stderr, " %s\n", mysql_stmt_error(s1));
		exit(0);
	}

	for (ii=0;ii<20;ii++)
	{
		testint1=ii;
		testint2=ii*2;
		if (mysql_stmt_execute(s1))
		{
			fprintf(stderr, " mysql_stmt_execute(), 1 failed\n");
			fprintf(stderr, " %s\n", mysql_stmt_error(s1));
			exit(0);
		}
	}

	/* close connection */
	mysql_free_result(res);
	mysql_close(conn);

	return 0;
}

Just run the following command in terminal to build myclientRunable which is excuteable:

gcc -o myclientRunable $(mysql_config --cflags) myclient.c $(mysql_config --libs)

Posted in Cocoa/Objective-C, Linux

Leave a Reply

Categories

Archives