備忘録のため,内容の正当性については責任を持ちません。

以前の記事で、CentOS 上で C から MySQL に接続したが、今回は Mac 上で C++ から MAMP の MySQL に接続してみる。


まずこの記事の手順で、MySQL のヘッダファイルやライブラリを用意しておく。うまくいけば次のようなファイルができる。

  • /Applications/MAMP/Library/include/mysql/mysql.h
  • /Applications/MAMP/Library/lib/libmysqlclient.dylib

C のときと同じように、MySQL に接続するプログラムを書く。

$ vi mysqltest.cpp
#include <iostream>
#include <mysql/mysql.h>

#define DBHOST "localhost"
#define DBPORT 8889
#define DBUSER "root"
#define DBPASS "root"
#define DBNAME "mysql"

int main()
{
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    // 接続
    conn = mysql_init(NULL);
    if (!mysql_real_connect(conn, DBHOST, DBUSER, DBPASS, DBNAME, DBPORT, NULL, 0)) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    // クエリ発行
    if (mysql_query(conn, "show tables")) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    // 結果表示
    res = mysql_use_result(conn);
    while ((row = mysql_fetch_row(res)) != NULL) {
        std::cout << row[0] << "\n";
    }
    mysql_free_result(res);

    // 切断
    mysql_close(conn);

    return 0;
}

コンパイル時にオプションを色々付けるのが面倒なので、Makefile を作成する。

$ vi Makefile
CXX      = g++
LDLIBS   = -lm -lmysqlclient
CXXFLAGS = -Wall -I/Applications/MAMP/Library/include
LDFLAGS  = -L/Applications/MAMP/Library/lib

mysqltest: mysqltest.cpp
    $(CXX) -o $@ $(LDLIBS) $(CXXFLAGS) $(LDFLAGS) $^
# ↑ここはスペースでなくタブ

make する。

$ make
c++ -o mysqltest -lm -lmysqlclient -Wall -I/Applications/MAMP/Library/include -L/Applications/MAMP/Library/lib mysqltest.cpp

できあがったバイナリを実行してみる。

$ ./mysqltest
columns_priv
db
event
func
  :

キタ━(゚∀゚)━! 意外にサクっと成功した。


コメント

コメントする




CAPTCHA