Entry

プログラミング・メモ - MySQL の C API を使ってみる

2007年05月07日

そういや MySQL の C API って使ったことないなー,と思ったので,使ってみました。簡単なテストしかしていません。とりあえず,ソースから。

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>

int
main (int argc, char *argv[])
{
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    const char *server = "localhost";
    const char *user = "aian";
    const char *password = "password";
    const char *database = "test";

    conn = mysql_init(NULL);
    if (mysql_real_connect(conn, server, user, password, database,
                            0, NULL, 0) == NULL) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(0);
    }

    if (mysql_query(conn, "SELECT * FROM test") != 0) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(0);
    }

    res = mysql_use_result(conn);
    while ((row = mysql_fetch_row(res)) != NULL) {
        printf("%s %s %s\n", row[0], row[1], row[2]);
    }
    
    mysql_free_result(res);
    mysql_close(conn);
    return 0;
}

コンパイルはこんな風にします(ファイル名は sqltest.c)。

aian:~ % cc -I/usr/local/include/mysql -L/usr/local/lib/mysql sqltest.c -lmysqlclient 

ここでは prepared statement を使わずに,直接 SQL を投げてるんですけど,大体こんな感じで書けばいいみたい。もちろん,prepared statement を使う方法もあります。こうして見ると,ResultSet を free すること以外は,JDBC なんかのお作法とそんなに変わりませんね。コネクションを作って,SQL を投げて,結果を fetch する……と。

おそらく,C から MySQL を扱う場合,SQL を組み立てたり,SELECT した後の処理を作ったりするあたりが面倒っちいことになるんだと思います。ここら辺は VIEW かなんかを用意して,ある程度 DB 側で処理を簡単にしておいた方が良さそうな感じ……(普通そうするんだろうけど)。けど,そもそも MySQL は 5.0 以上じゃないと VIEW がないんですよねー……にんともかんとも。

とりあえず,MySQL は C からも簡単にアクセスできるってことは分かりました。あとはリファレンスを読みつつ,ゴニョゴニョしてみます。

参考:MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 11.1 MySQL C API

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN