個人的基準によるMySQLリファレンス


6.(3) C言語によるMySQLの使用

a.関係ファイルのパスを確認する。

findでファイルを探す。
位置はOSによって異なる。  プロンプトは使用環境により異なる。
% find / -name mysql.h[Enter]
/usr/local/include/mysql/mysql.h

% find / -name libmysqlclient.so[Enter]
/usr/local/lib/mysql/libmysqlclient.so

% find / -name libmysqlclient.a[Enter]
/usr/local/lib/mysql/libmysqlclient.a

b.コンパイル時の指定

Cプログラムソース(下の例ではmysqlclient.c)コンパイル時にライブラリパス等を指定する。
# gcc -c -I /usr/local/include/mysql/ myclient.c [Enter]
# gcc -o myclient myclient.o -L /usr/local/lib/mysql/ -l mysqlclient [Enter]
別の方法
# gcc -o myclient \[Enter]
-I /usr/local/include/mysql/ \[Enter]
-L /usr/local/lib/mysql/ \[Enter]
-l mysqlclient \[Enter]
myclient.c[Enter]
gccでコンパイルする際の留意事項
※1使用しているOSにより、ライブラリデフォルトパスが異なるが、gccのデフォルトパスは、多くの場合、インクルードファイルが /usr/include、ライブラリファイルが /usr/lib である。
 例えば、FreeBSDでは、これがそれぞれ、/usr/local/include , /usr/loca/lib なので、gcc以外のアプリケーションに関わるライブラリ群は /usr/local 以下に置かれる。
 この場合、gcc使用時には-I, -Lオプションでパスを明示する必要がある。

【参照】[FreeBSD-users-jp 92680] Re: /usr/local/ 以下へのアクセス
    [FreeBSD-users-jp 92684] Re: /usr/local/ 以下へのアクセス

c.プログラムソース例

MySQLから全データを抽出して表示するプログラム
 参考: http://mail.courier-users.jp/lists/public/archive/200511.month/134.html
---------------- mysqltest.c -----------------
#include <stdlib.h>
#include <stdio.h>
#include <mysql.h> ← MySQLヘッダインクルード

#define MYSQL_SERVER "127.0.0.1"
#define MYSQL_USERNAME "root" ← ログインユーザ名
#define MYSQL_PASSWORD "postfix" ← ログインパスワード
#define MYSQL_DB "books"← 使用DB名
#define MYSQL_SOCKET "/var/run/mysqld/mysqld.sock"
#define MYSQL_OPT 0

int main(int argc, char** argv)
{
int count;
MYSQL mysql_buf;
MYSQL *mysql=0;
MYSQL_RES *result; ← SQL回答領域の確保
MYSQL_ROW record;

mysql_init(&mysql_buf); ← MySQL 構造体の初期化mysql_init関数
mysql = mysql_real_connect(&mysql_buf, ← MySQLデータベースにログインmysql_real_connect関数
MYSQL_SERVER, MYSQL_USERNAME,
MYSQL_PASSWORD, MYSQL_DB, MYSQL_PORT,
MYSQL_SOCKET, MYSQL_OPT);
if (!mysql) ← 変数mysqlには接続確立時はMYSQL*接続ハンドル,非確立時はNULLが入る。
{
printf("failed to connect to mysql server (server=%s, userid=%s)\n",
MYSQL_SERVER ? MYSQL_SERVER : "",
MYSQL_USERNAME ? MYSQL_USERNAME : "");
return (-1);
}


mysql_query(&mysql_buf, "SELECT id, Title, Editions, PrintTimes, Pressday, Writers, Conpany, ISBN, Division, Price, Memo, AddDate, EditDate FROM booklist"); ← SQL文の発行。データにバイナリが含まれるときは関数mysql_real_queryを使用する。
result = mysql_store_result(&mysql_buf); ← SQL回答領域ハンドルの取得

for(count = mysql_num_rows(result); count > 0; count--) ←結果セットのレコード数回繰り返す。
{
record = mysql_fetch_row(result); ← 結果セットの次のレコードを取得する。
printf("\nArticle no. %s\n", record[0]);
printf("Title: %s\n", record[1]);
printf("Author: %s\n", record[5]);
};

mysql_close(&mysql_buf); ← MySQLからログオフ

mysql_free_result(result); ← SQL回答領域の解放

return 0;
}
---------------- mysqltest.c -----------------


前へ  メ ニューへ  次へ

Edit date: 2010-01-04