C言語でMySQLを操作する
MySQLを利用する場合、WEBのシステム構築となると
フロントエンドがPHPやrubyといったスクリプトで記述することが多いと思います。
今日は、C言語からMySQLを操作するAPIを利用してみたいと思います。
私の環境はFedora7で、すでにmysqlのC APIがインストール済みなので
ヘッダファイルとライブラリファイルが以下のようにそろっています。
[root@fedora7 c]# ls /usr/include/mysql/ chardefs.h my_config_i386.h my_semaphore.h mysqld_error.h sslopt-case.h errmsg.h my_dbug.h my_sys.h raid.h sslopt-longopts.h history.h my_dir.h my_xml.h readline.h sslopt-vars.h keycache.h my_getopt.h mysql.h rlmbutil.h tilde.h keymaps.h my_global.h mysql_com.h rlprivate.h typelib.h m_ctype.h my_list.h mysql_embed.h rlshell.h xmalloc.h m_string.h my_net.h mysql_time.h rltypedefs.h my_alloc.h my_no_pthread.h mysql_version.h sql_common.h my_config.h my_pthread.h mysqld_ername.h sql_state.h
[root@fedora7 c]# ls /usr/lib/mysql/ libdbug.a libmysqlclient.so libmysqlclient_r.so.15 mysql_config libheap.a libmysqlclient.so.15 libmysqlclient_r.so.15.0.0 mysqlbug libmyisam.a libmysqlclient.so.15.0.0 libmystrings.a libmyisammrg.a libmysqlclient_r.a libmysys.a libmysqlclient.a libmysqlclient_r.so libvio.a
試しに、次の駅テーブルの中身を表示させてみます。
mysql> describe M_STATION; +-------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+-------+ | CODE | char(7) | NO | | | | | RAIL_NAME | varchar(255) | NO | | | | | STATION_NUMBER | int(11) | NO | | | | | STATION_NAME | varchar(255) | NO | | | | | TODOFUKEN | varchar(20) | NO | | | | | STATION_NAME_KANA | varchar(255) | NO | | | | | LAT | double | YES | | 0 | | | LNG | double | YES | | 0 | | | LAT_DMS | varchar(30) | YES | | | | | LNG_DMS | varchar(30) | YES | | | | +-------------------+--------------+------+-----+---------+-------+ 10 rows in set (0.00 sec)
[root@fedora7 c]# gcc mysql_test.c -lmysqlclient -lnsl -lm -lz -L/usr/lib/mysql [root@fedora7 c]# ./a.out [JR]函館本線(函館~長万部) 函館 41.773746 140.726399 [JR]函館本線(函館~長万部) 五稜郭 41.803418 140.733884 [JR]函館本線(函館~長万部) 桔梗 41.846735 140.723046 [JR]函館本線(函館~長万部) 大中山 41.864738 140.713482 [JR]函館本線(函館~長万部) 七飯 41.887012 140.68855 [JR]函館本線(函館~長万部) 渡島大野 41.905045 140.647628 [JR]函館本線(函館~長万部) 仁山 41.930014 140.63522 [JR]函館本線(函館~長万部) 大沼 41.971954 140.669347 [JR]函館本線(函館~長万部) 大沼公園 41.98103 140.669888 [JR]函館本線(函館~長万部) 赤井川 42.003267 140.642678 [JR]函館本線(函館~長万部) 駒ヶ岳 42.038781 140.610537 [JR]函館本線(函館~長万部) 東山 42.061728 140.605261 [JR]函館本線(函館~長万部) 姫川 42.081301 140.591677 [JR]函館本線(函館~長万部) 池田園 41.990661 140.700333 [JR]函館本線(函館~長万部) 流山温泉 42.003474 140.716494 [JR]函館本線(函館~長万部) 銚子口 42.015518 140.720673 [JR]函館本線(函館~長万部) 鹿部 42.06439 140.771393 [JR]函館本線(函館~長万部) 渡島沼尻 42.107041 140.747609 [JR]函館本線(函館~長万部) 渡島砂原 42.121645 140.68954 [JR]函館本線(函館~長万部) 掛澗 42.119211 140.646094 [JR]函館本線(函館~長万部) 尾白内 42.111221 140.613465 [JR]函館本線(函館~長万部) 東森 42.106845 140.593564 [JR]函館本線(函館~長万部) 森 42.108897 140.573985 [JR]函館本線(函館~長万部) 桂川 42.11559 140.542794 [JR]函館本線(函館~長万部) 石谷 42.13553 140.506553 [JR]函館本線(函館~長万部) 本石倉 42.159668 140.471957 [JR]函館本線(函館~長万部) 石倉 42.172839 140.458461 [JR]函館本線(函館~長万部) 落部 42.187544 140.420886 [JR]函館本線(函館~長万部) 野田生 42.217104 140.37586 [JR]函館本線(函館~長万部) 山越 42.231172 140.326593 [root@fedora7 c]#