C
MySQL

CでMySQLにアクセスする

More than 1 year has passed since last update.


概要

MySQLのCドライバを使って

MySQLにアクセスするサンプルを作りましたので、そのソースと手順などを共有したいと思います。


開発環境構築

MySQLとドライバをインストールします。

yum -y update

yum -y install mysql-devel mysql-server gcc
service mysqld start

Ubuntu(docker ubuntu:14.10)

apt-get update

apt-get -y upgrade
apt-get -y install libmysqlclient-dev mysql-server gcc
/etc/init.d/mysql start


テスト用データの入力

テスト用なので適当にデータを入れてください。

mysql -uroot

create database db_test;
use db_test
create table tb_test(id int,name varchar(256));
insert into tb_test(id,name) values(1,"aaa");
insert into tb_test(id,name) values(2,"bbb");
insert into tb_test(id,name) values(3,"ccc");
exit


MySQLへアクセス


mysql.c

#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
int main(void){
MYSQL *conn = NULL;
MYSQL_RES *resp = NULL;
MYSQL_ROW row;
char sql_str[255];
char *sql_serv = "localhost";
char *user = "root";
char *passwd = "";
char *db_name = "db_test";

memset( &sql_str[0] , 0x00 , sizeof(sql_str) );

// mysql接続
conn = mysql_init(NULL);
if( !mysql_real_connect(conn,sql_serv,user,passwd,db_name,0,NULL,0) ){
// error
exit(-1);
}

// クエリ実行
snprintf( &sql_str[0] , sizeof(sql_str)-1 , "select * from tb_test" );
if( mysql_query( conn , &sql_str[0] ) ){
// error
mysql_close(conn);
exit(-1);
}

// レスポンス
resp = mysql_use_result(conn);
while((row = mysql_fetch_row(resp)) != NULL ){
printf( "%d : %s\n" , atoi(row[0]) , row[1] );
}

// 後片づけ
mysql_free_result(resp);
mysql_close(conn);
return 0;
}



コンパイル、実行

「/usr/lib64/mysql/」の部分はfind /-name "libmysqlclient.so"等で

ライブラリの配置場所を探してパスを指定します。

gcc -Wall -o mysql mysql.c -lmysqlclient -L/usr/lib64/mysql/

./mysql
1 : aaa
2 : bbb
3 : ccc