質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1137閲覧

DBに接続できない(C++, cocos2d-x, Mysql, connector/C, Visualstudio2015)

tsysrtk

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

COCOS2D-X

COCOS2D-Xは、 2Dゲームを手軽に開発できるフレームワークのことです。 iPhone(iOS)向け、Android等に対応しており、 実質ワンソースで開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/06/30 01:49

編集2017/06/30 05:52

最近プログラムを始めた初心者という前提でお願いいたします。
個人的にcocos2d-xを使ってC++でゲームを作っています。
データ管理のためになじみのあるMysql選択し、C++で接続しようと試みました。
参考にしたサイトは
http://qiita.com/tomov3/items/cd2a3df22f025ff167cd
です。

しかし、なかなかうまくいかず四苦八苦しております。

下準備として、
visualstudioのプロジェクトに
connector/Cと、MysqlのIncludeパス、ライブラリパスは設定しております。

Connector/Cは64bit、 プロジェクトのプラットフォームはWin32です。

#include <mysql_driver.h>
#include <mysql_connection.h>
#include <mysql_error.h>
#include <cppconn/Statement.h>
#include <cppconn/ResultSet.h>

.
.
.
.

auto driver = 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など。そしてその方法)

すみませんがご教授のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2017/06/30 05:33

インストールしたConnector/Cが64bit or 32bitか?とプロジェクトのプラットフォームがx64 or Win32か?を明記ください。
tsysrtk

2017/06/30 05:43 編集

Connector/Cは64bit、 プロジェクトのプラットフォームはWin32です。
guest

回答3

0

x86=32bit版のEXEにx64=64bit版のライブラリはリンクできないといった意味のエラーです。
開発環境にインストールしたライブラリConnector/C++ と、ご自身のC++プロジェクトのプラットフォームが異なることが原因だと思います。

ビルドするにはx86用のConnector/C++ライブラリのインストールが必要です。

投稿2017/06/30 06:03

can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsysrtk

2017/06/30 06:19

ご回答ありがとうございます。 試してみます。
tsysrtk

2017/06/30 07:12

めちゃくちゃ文字化けしていますが、 なんとか接続できたみたいです。 ありがとうございました!!
guest

0

ベストアンサー

C++でMySQLを扱った事がないので、代わりにsqliteをおすすめしておきます。
私自身、仕事でcocos2d-xでsqliteを使ったAndroid/iOSゲームを開発・リリースしていて、実績があるため。

cocos2d-xにsqliteを導入する方法

http://www.sqlite.org/download.html から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する例を記載します。

cpp

1void MainScene::test() { 2 sqlite3* db = nullptr; 3 if (sqlite3_open("test.db", &db) != SQLITE_OK) { 4 return; 5 } 6 7 // sampleテーブルの全レコードを抽出 8 std::string sql = "SELECT * FROM sample"; 9 sqlite3_stmt *stmt = nullptr; 10 int result = sqlite3_prepare_v2(db, sql.c_str(), 128, &stmt, nullptr); 11 if (result != SQLITE_OK) { 12 sqlite3_reset(stmt); 13 sqlite3_finalize(stmt); 14 sqlite3_close(db); 15 return; 16 } 17 18 int colCount = sqlite3_column_count(stmt); 19 while (sqlite3_step(stmt) == SQLITE_ROW) { 20 for (int col = 0; col < colCount; col++) { 21 std::string name = sqlite3_column_name(stmt, col); 22 std::string value = StringUtils::format("%s", sqlite3_column_text(stmt, col)); 23 CCLOG("name=%s, value=%s", name.c_str(), value.c_str()); 24 } 25 } 26 27 sqlite3_reset(stmt); 28 sqlite3_finalize(stmt); 29 sqlite3_close(db); 30}

投稿2017/06/30 06:00

編集2017/07/01 03:39
mingos

総合スコア4025

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsysrtk

2017/06/30 06:23

ご回答ありがとうございます。 上の方の方法で、できなければ試してみます。 そういえばSQLiteも使用したことあったなぁ・・・。
tsysrtk

2017/07/01 02:57

文字化け問題を解決できず、 結局Mysqlをあきらめて SQLiteで開発しようと決めました、 DBのオープン、クローズまではなんとかできたようなのですが、 DBのレコードを作成したにも関わらず、 sqlite3 *pDB = NULL; sqlite3_stmt *pStmt = NULL; char *errMsg = NULL; char *sql = NULL; int result = 0; // select sql = "select * from member_info"; result = sqlite3_exec(pDB, sql, NULL, &pStmt, NULL); if (result != SQLITE_OK) { CCLOG("QUERY ERR! %d\n", result); } else { // データの抽出 int colCount = sqlite3_column_count(pStmt); CCLOG("カラム数 = %d\n", colCount); for (int col = 0; col < colCount; colCount++) { CCLOG("%d : %s %s\n", col, sqlite3_column_name16(pStmt, col), sqlite3_column_decltype16(pStmt, col)); とすると カラム数 = 0 と 出力され、処理が行えない状態でございます。 何か原因があるのでしょうか?
mingos

2017/07/01 03:44

手元で試して実際に動作しているコードを回答に追記しました。 sqlite3_execは使った事がなかったのですが、sqlite3_execでいろいろ試しましたがどうもうまく行きません。 私がいつも使っている、sqlite3_prepare_v2で動作したのでこっちの例を記載しています。 それからsqlite3_step(stmt)でカーソルが移動するので、これは必要な回数だけ実行する必要があります。
tsysrtk

2017/07/01 04:00

ありがとうございます!!! name=id, value=test1234 name=password, value=test1234 無事データを取得することができました!!!!! 1週間もC++のDB接続について悩んでいたので、ものすごく感謝です! またSQLite関連で困ったら質問を立ち上げるかもしれませんが、 またその時はよろしくお願いいたします! PHPだったら簡単なのに・・・。
mingos

2017/07/01 06:44

うまく行ったようで安心しました。 C++も難しいですが、さらにsqlite3のAPIが使いにくいですよね。 自分も初めて使った時はかなり苦戦しました。 でも、一度処理を書いてしまえばコピペで済みますので、がんばってください。
guest

0

メッセージIDである「LNK4272」で検索すると結構出てきます。
内容からするとMYSQLのドライバーがWindowsのbitと合ってないのではと推察されます。
参照先にも「OS に応じて適切なものを選択」とありますよね。
メッセージからすると質問者のOSは32bitと思われますので32bit版のドライバーを利用すると良いです。

投稿2017/06/30 04:32

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsysrtk

2017/06/30 05:22 編集

御回答ありがとうございます >メッセージからすると質問者のOSは32bitと思われますので いえ、OSは64bitです。 かといって、Mysqlのドライバーが32bitなのかというと、 Mysqlは両方がインストールされるようなので、 そんなことはないように思えます・・・。
m.ts10806

2017/06/30 05:24

両方?ですか・・ 両方入ってるからダメとかってないですかねー 「競合してる」ってことですし。
tsysrtk

2017/06/30 05:31

なるほど、それはあるかもしれませんね・・・。 調べてみます。
m.ts10806

2017/06/30 05:35 編集

解決につながる回答とならずすみません。
tsysrtk

2017/06/30 05:44 編集

Mysqlについて少し認識が異なっていました。 ※32bitと書かれていますが、64bit版のPCにも利用することができます とのことでした。 https://techacademy.jp/magazine/1940
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問