Mac に MySQL をインストールする の続きです。
MySQL Connector は MySQL サーバーへ接続するためのクライアントライブラリです。 オラクルよりプログラム言語別に提供されている。 MySQL Connector/C++ はC++用のライブラリです。
バージョン 8.0 からX DevAPIに対応している。
X DevAPI はドキュメント指向のAPIです。
mysqlcilent と大きく異なるので面食らう。
MySQL の X Protocol/X DevAPI 周りについて調査したのをまとめたののメモ
X DevAPI のドキュメントはあるが、かなり難しい。
サンプルコードが少ない。 見つかったのは 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