C++ から MySQL のデータベースに接続する
MySQL
MySQL はオープンソースで公開されている RDBMS の1つです.色々なアプリケーションで用いられていますが,C++ のプログラムから MySQL に接続する方法を紹介する記事が少なかったので,実際にソースコードを示しながらまとめたいと思います.
C++ のプログラムからデータベースを操作するには Connector/C++ を用います.
下記のリンクからダウンロード可能です.
MySQL :: Download Connector/C++
実行環境は Mac OS X (10.11) ですが,おそらく Linux でも同様に実行可能だと思います.
C++ は C++11 を使用しています.
また,MySQL と Connector/C++ のインストールや SQL 構文の詳細については省略します.
Connector/C++
例として基本的な操作を行うプログラムのソースコードを添付します.
以下のテーブルを作成し, SELECT 文でデータを取得したデータを出力しています.
+------+--------+ | cid | name | +------+--------+ | 1 | SIGMOD | | 2 | VLDB | | 3 | ICDE | | 4 | KDD | +------+--------+
プログラムは次の通りです.
実行結果は以下の通りになります.
conference table created. 0 cid = 1, name = 'SIGMOD' 1 cid = 2, name = 'VLDB' 2 cid = 3, name = 'ICDE' 3 cid = 4, name = 'KDD'
データベースとの接続は sql::mysql::MySQL_Driver クラスから生成した sql::Connection インスタンスで行います(20, 21 行).
SQL による問い合わせを実行するには sql::Statement を使用します(22 行).
データの追加(INSERT など)のように結果を返さない問い合わせは stmt->execute() で実行します(25~33 行).
一方,データの取得(SELECT など)のように結果を返す問い合わせは stmt->executeQuery() で実行し,結果は sql::ResultSet で受け取ります(35 行).
sql::ResultSet によってデータを取得すると,iterator を通じて各 row に対して操作を行うことができます(38~45 行).
res->getInt(column_num) は,column_num 列目の int 型の要素を取得します(index は 1 から開始).
res->getString(column_name) は,列名が column_name である string 型の要素を取得します.
まとめ
Connector/C++ を用いて MySQL のデータベースに接続しました.
基本的に sql::Statement の execute() か executeQuery() を用いて SQL の問い合わせを行います.
非常に簡易な説明なのでわかりにくいかと思いますが,詳しくは Document を読んでいただけたらと思います.
MySQL :: MySQL Connector/C++ Developer Guide :: 7 Getting Started with Connector/C++: Usage Examples
追記(2016/10/14)
本記事の内容をより詳しくまとめて Qiita に投稿しました.
ぜひこの記事についても参照してみてください.