LinuxでC言語でMysql

昔のメモから。
SmartQV5のLinuxから無線LAN経由で実行すると残念な速度だった。

必要なライブラリ。

[bash]
apt-get install libmysqlclient-dev
[/bash]

あとは適度にプログラム

[cpp]
main.c
#include <stdio.h>
#include <mysql.h>

const char *hostname = "localhost";
const char *username = "hoge";
const char *password = "hoge";
const char *database = "test";
unsigned long portnumber = 0;

/*
* mysql function
*/
int connectDatabase();
MYSQL_RES *query(unsigned char *);
MYSQL_ROW fetchRow(MYSQL_RES *);
void freeResult(MYSQL_RES * );
void closeDatabase();

MYSQL *mysql;
MYSQL_RES *g_res = NULL;

int main(){

MYSQL_RES *res;
MYSQL_ROW row;

if (!connectDatabase()){
printf("error connect databasen");
};

/* INSERT文の実行 */
query("INSERT INTO test VALUES(‘hoge’,’hoge’)");

/* SELECT文の実行 */
res = query("SELECT * FROM test;");

printf("%20s %20s n", "COLUMN_A", "COLUMN_B");
while( (row = fetchRow(res)) != NULL ){
printf("%10s %20s n", row[0], row[1]);
}

closeDatabase();

}

int connectDatabase(){
mysql = mysql_init(NULL);
if (NULL == mysql){
printf("error: %sn", mysql_error(mysql));
return -1;
}
if (NULL == mysql_real_connect(mysql, hostname, username, password, database, portnumber, NULL, 0)){
// error
printf("error: %sn", mysql_error(mysql));
return -1;
} else {
// success
}
return 1;
}

MYSQL_RES *query(unsigned char *sql_string){
if(g_res){
freeResult(g_res);
g_res = NULL;
}

if (mysql_query(mysql, sql_string)) {
printf("error: %sn", mysql_error(mysql));
return NULL;
}

g_res = mysql_use_result(mysql);
return g_res;
}

MYSQL_ROW fetchRow(MYSQL_RES * res){
return mysql_fetch_row(res);
}

void freeResult(MYSQL_RES * res){
mysql_free_result(res);
g_res = NULL;
}

void closeDatabase(){
if(g_res){
freeResult(g_res);
g_res = NULL;
}
mysql_close(mysql);
}
[/cpp]

makefile
[text]
# Makefile

# マクロ定義
CC = gcc
CFLAGS = -O
LDFLAGS =
INCLUDES = -I/usr/include/mysql/
LIBS = -L/usr/lib/mysql/ -lmysqlclient
TARGET = main
OBJS = main.o

# 生成規則
all: $(TARGET)

$(TARGET): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)

clean:
-rm -f $(TARGET) $(OBJS) .nfs* *~ ¥#* core

.c.o:
$(CC) $(CFLAGS) $(INCLUDES) -c $<

main.o:main.c
[/text]

参考

c/c++で MySQL を使う方法 – ぴょぴょぴょ? – Linuxとかプログラミングの覚え書き – http://d.hatena.ne.jp/pyopyopyo/20091219/p1

C言語でMySQLに接続する : fujishinko 雑記帳 http://mblog.excite.co.jp/user/fujishinko/entry/detail/?id=7264344