質問: sql::mysql::get_mysql_driver_instance(); このコードを書いただけで、 LNK2019 未解決の外部シンボル "*declspec(dllimport) class sql::mysql::MySQL_Driver **cdecl sql::mysql::get_driver_instance(void)" (*imp_?get_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ) が関数 "class sql::mysql::MySQL_Driver **cdecl sql::mysql::get_mysql_driver_instance(void)" (?get_mysql_driver_instance@mysql@sql@@YAPAVMySQL_Driver@12@XZ) で参照されました。 LNK4272 ライブラリのコンピューターの種類 'x64' がターゲットのコンピューターの種類' X86' と競合しています と出てしまいます。 したのエラーに関しては、プロジェクトの設定が違う(?)という記事が調べたらでてきましたので、 x64のプロジェクトに設定を変えようと試みましたが、そうした場合cocos2d-xの方で、 エラーが出てしまいます。 そのせいで、ライブラリを読み込めず、上のエラーが出てしまうと認識しています。 そこで、質問があります。 C++でMysqlを接続する方法について(上記エラーや環境設定に対して見落とし、あるいは解決法) ほかに簡単な方法はないのか?(Mysql以外に接続が容易なRDBMSなど。そしてその方法) すみませんがご教授のほどよろしくお願いいたします。
回答: C++でMySQLを扱った事がないので、代わりにsqliteをおすすめしておきます。 私自身、仕事でcocos2d-xでsqliteを使ったAndroid/iOSゲームを開発・リリースしていて、実績があるため。 ### cocos2d-xにsqliteを導入する方法 からsqlite-amalgamation-3190300.zipをダウンロードして展開します。 Classes/以下にこの3つのファイルをコピーします。 sqlite3.c sqlite3.h sqlite3ext.h 以上で完了です。 後は必要なところで、sqlite3.hをインクルードする事でsqliteの命令が使えます。 ### 使い方 「C++ sqlite」でGoogle検索するといろいろ出てきます。 一番目に出てきたページを紹介します。 SQLite C言語向けAPI チートシート - Qiita ### その他 sqliteのDBをあらかじめ作っておきたい場合は、PupSQLite などのフリーソフトでsqliteのDBファイルを作る事が出来ます。 作ったDBファイル(*.db)をResources以下に配置しておけば良いと思います。 ### 追記 Resources/test.db の内容をSELECTする例を記載します。 ``` void MainScene::test() { sqlite3* db = nullptr; if (sqlite3_open("test.db", &db) != SQLITE_OK) { return; } // sampleテーブルの全レコードを抽出 std::string sql = "SELECT * FROM sample"; sqlite3_stmt *stmt = nullptr; int result = sqlite3_prepare_v2(db, sql.c_str(), 128, &stmt, nullptr); if (result != SQLITE_OK) { sqlite3_reset(stmt); sqlite3_finalize(stmt); sqlite3_close(db); return; } int colCount = sqlite3_column_count(stmt); while (sqlite3_step(stmt) == SQLITE_ROW) { for (int col = 0; col < colCount; col++) { std::string name = sqlite3_column_name(stmt, col); std::string value = StringUtils::format("%s", sqlite3_column_text(stmt, col)); CCLOG("name=%s, value=%s", name.c_str(), value.c_str()); } } sqlite3_reset(stmt); sqlite3_finalize(stmt); sqlite3_close(db); } ```