C++ にて MySQL Connector/C++ を使って MySQLを操作する

Mac に MySQL をインストールする の続きです。

MySQL Connector は MySQL サーバーへ接続するためのクライアントライブラリです。 オラクルよりプログラム言語別に提供されている。 MySQL Connector/C++C++用のライブラリです。

MySQL Connector および API

MySQL Connector/C++

Mac の場合は、brewコマンドでインストールできる。

Homebrew: mysql-connector-c++

バージョン 8.0 からX DevAPIに対応している。

X DevAPI はドキュメント指向のAPIです。

mysqlcilent と大きく異なるので面食らう。

MySQL の X Protocol/X DevAPI 周りについて調査したのをまとめたののメモ

Document-oriented database

X DevAPI のドキュメントはあるが、かなり難しい。

MySQL: X DevAPI User Guide

サンプルコードが少ない。 見つかったのは Github にあるものだけ。 https://github.com/mysql/mysql-connector-cpp

int main(int argc, const char* argv[])
try {
  const char   *url = (argc > 1 ? argv[1] : "mysqlx://root@127.0.0.1");
  cout << "Creating session on " << url
       << " ..." << endl;
  Session sess(url);
  cout <<"Session accepted, creating collection..." <<endl;
  Schema sch= sess.getSchema("test");
  Collection coll= sch.createCollection("c1", true);
  cout <<"Inserting documents..." <<endl;
  coll.remove("true").execute();
// 以下略

まずはこれを試す。 すんなり動いた。

このサンプルコードはテーブルを作ってレコードを挿入するもの。

既存のテーブルからデータを取り出すものが見つからない。 仕方ないので、ドキュメントを読みながら自作する、

ドキュメントでは、下記のコードでデータを取り出せるようだ。

mysqlx::Collection coll = sch.getCollection(table_name); DocResult docs = coll.find().execute();

コンパイルはできるが、実行すると、下記のエラーになる。

ERROR: CDK Error: Unknown column 'doc' in collection

これは諦めて、別の方法を探す。

mysqlcilent と同じように
テーブルに対する select 文も使えるようだ。

mysqlx::Table table = sch.getTable(table_name); mysqlx::RowResult res = table.select().execute(); std::list<mysqlx::Row> list = res.fetchAll();

これは動いた。

サンプルコードを Github に公開した。 https://github.com/ohwada/MAC_cpp_Samples/blob/master/mysql-connector-cpp/db_test/show_db_test.cpp