MySQL Connector/C++を導入してみた

MySQL Connector/C++を入れる機会があって少し悩んだのでメモ。

公式からソースコードをDLし*1makeするとmysql.hとerrmsg.hがみつからないと言われる。
ぐぐってみるとこれらはmysqlには含まれず、mysql-develに含まれるらしいので

sudo yum install mysql-devel

としてインストール。
そしてふたたび

cmake .
make clean
sudo make
sudo make install

とすることでインストールできた。
念の為動作確認を行う。(ユーザ名・パスワードは適宜変更してください。)

#include<memory>

#include<mysql_connection.h>
#include<mysql_driver.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

int main(){

	auto driver = sql::mysql::get_mysql_driver_instance();


	auto raw_con =driver->connect("localhost", "mysqluser", "mysqlpass");
	auto con = std::shared_ptr<sql::Connection>(raw_con);
	
	auto raw_stmt = con->createStatement();
	auto stmt = std::shared_ptr<sql::Statement>(raw_stmt);

	auto raw_res = stmt->executeQuery("SHOW DATABASES");
	auto res = std::shared_ptr<sql::ResultSet>(raw_res);

	while (res->next()) {
		std::cout << res->getString("DataBase") << std::endl;
	}

}

コンパイルは

g++ -lmysqlcppconn -std=c++0x  main.cpp

とlibmysqlcppconnの場所を教えてあげないといけない。
コンパイルできたら実行してデータベース一覧が表示されれば成功。

ちなみにMySQL Connector/C++を叩かなくてもWt::DboというORマッパーが存在するのでそちらを利用したほうが通常は捗るような気がする。

*1:ユーザ登録しなくちゃいけなかったりとひじょーにだるい。めったにDLしないからパスワードとか忘れるし...改善して欲しい