web-dev-qa-db-ja.com

C ++を使用してmySQLデータベースに接続する方法

Webサイトからデータベースに接続し、C++を使用していくつかの行を表示しようとしています。要するに、サイトデータベースのテーブルから選択クエリを実行するアプリケーションを作成しようとしています。今、これを可能にしなければならないのは、それを行うアプリケーションがたくさんあるからです。

どうすればいいですか?誰かが例を作って、使用するライブラリを教えてもらえますか?

33
lepel100

見つかった ここ

/* Standard C++ includes */
#include <stdlib.h>
#include <iostream>

/*
  Include directly the different
  headers from cppconn/ and mysql_driver.h + mysql_util.h
  (and mysql_connection.h). This will reduce your build time!
*/
#include "mysql_connection.h"

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

using namespace std;

int main(void)
{
cout << endl;
cout << "Running 'SELECT 'Hello World!' »
   AS _message'..." << endl;

try {
  sql::Driver *driver;
  sql::Connection *con;
  sql::Statement *stmt;
  sql::ResultSet *res;

  /* Create a connection */
  driver = get_driver_instance();
  con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
  /* Connect to the MySQL test database */
  con->setSchema("test");

  stmt = con->createStatement();
  res = stmt->executeQuery("SELECT 'Hello World!' AS _message"); // replace with your statement
  while (res->next()) {
    cout << "\t... MySQL replies: ";
    /* Access column data by alias or column name */
    cout << res->getString("_message") << endl;
    cout << "\t... MySQL says it again: ";
    /* Access column fata by numeric offset, 1 is the first column */
    cout << res->getString(1) << endl;
  }
  delete res;
  delete stmt;
  delete con;

} catch (sql::SQLException &e) {
  cout << "# ERR: SQLException in " << __FILE__;
  cout << "(" << __FUNCTION__ << ") on line " »
     << __LINE__ << endl;
  cout << "# ERR: " << e.what();
  cout << " (MySQL error code: " << e.getErrorCode();
  cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

cout << endl;

return EXIT_SUCCESS;
}
32
hd1

最後に、Ubuntu 12.04でC++コネクタを使用してプログラムを正常にコンパイルできました。このコマンドを使用してコネクタをインストールしました。

'apt-get install libmysqlcppconn-dev'

最初に、「get_driver_instanceへの未定義参照」で同じ問題に直面し、これを解決するために、MySQL_Driver型のドライバーインスタンス変数を宣言しました。すぐに参照できるように、このタイプはmysql_driver.hファイルで定義されています。これが、プログラムで使用したコードスニペットです。

sql::mysql::MySQL_Driver *driver;
try {     
    driver = sql::mysql::get_driver_instance();
}

-l mysqlcppconnリンカーオプションを使用してプログラムをコンパイルしました

このヘッダーを含めることを忘れないでください

#include "mysql_driver.h" 
10
munawwerali

はい、mysql c ++コネクタライブラリが必要です。以下をお読みください。mysql開発者から提供された例を動作させる方法を説明します。

注(および解決策):IDE:Visual Studio 2010を使用してみましたが、ほんの数秒前にこれがすべて動作するようになりました。私はマニュアルでそれを見逃したようですが、Visual Studio 2008を使用することをお勧めします。VS2008Express for c ++をダウンロードしてインストールし、マニュアルの第5章の手順に従い、エラーがなくなりました!できます。問題は解決しました。 Visual Studioの新しいバージョンで動作させる方法に関するものを除きます。 Visual Studioアドオン用のmysqlを試してみてください。vs2010以上で正常に接続できます。 mysqlのWebサイトからダウンロードできます

上記の例を動作させようとしている間、mysql dev Webサイトの変更による困難からここにいることに気づきました。まだコメントできないため、これを回答として書いたことをおaび申し上げます。今後の開発者を支援できるように、何をすべきかを見つけて解決策を見つけたら編集します。(これがあまりにも大きくなったので、とにかくコメントとして適合している、笑)

「例」への@ hd1リンクは機能しなくなりました。リンクをたどると、メインマニュアルへのリンクを提供するページが表示されます。メインマニュアルは良いリファレンスですが、特に特定のファイルが欠落している場合や追加するものがない場合は経験がないため、非常に古くて時代遅れで新しい開発者にとっては難しいようです。

@ hd1のリンクは移動しました。記事名だけを保持して、URLコンポーネントを削除することでクイック検索で見つけることができます。ここでは、とにかく次のとおりです。http://dev.mysql。 com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html

7.5 MySQL Connector/C++ Complete Example 1を動作させる

ダウンロード:

-mysql c ++コネクターを取得します。大きい場合でも、Zipではなくインストーラーパッケージを選択します。

-boost.orgからboostライブラリを取得します。これは、mysql c ++コネクターのconnection.hおよびmysql_connection.hでboostが使用されるためです。

今すぐ続行:

-コネクタをcドライブにインストールし、mysqlサーバーのインストールフォルダー/ libに移動してすべてのlibmysqlファイルをコピーし、コネクターのインストールフォルダー/ lib/optに貼り付けます

-BoostドライブをCドライブに抽出します

次へ:

例からコードをそのままコピーしてもかまいません(上記のリンク、そしてもちろん新しいc ++プロジェクトにコピーします)。エラーに気付くでしょう:

-最初:変更

cout << "(" << __FUNCTION__ << ") on line " »
 << __LINE__ << endl;

cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;

その小さな二重矢印が何のためかわからないが、私はそれがC++の一部だとは思わない

-2番目: sqlマニュアルの第5章 を読んで、それらの他のエラーを修正します。以下の第5章に関する私の段落に注意してください

[注1]:第5章Microsoft Visual Studioを使用したMySQL Connector/C++ Windowsアプリケーションの構築この章に従う場合は、最新のc ++コネクタでは、コネクタフォルダにあるものと画像に表示されるものがまったく異なることがわかるでしょう。 mysqlサーバーインストールのincludeおよびlibフォルダー、またはmysql c ++コネクターフォルダーのincludeおよびlibフォルダーのいずれを見ても、マニュアルを更新するか、魔法のダウンロードがない限り完全に一致しませんが、私にとってはそうではありません2014年3月に開始されたコネクタダウンロードと一致します。

その第5章に従ってください。

-ただし、c/c ++の場合、一般、追加のインクルードディレクトリには、サーバーインストールフォルダーではなく、インストールしたコネクターの「インクルード」フォルダーが含まれます。

-上記を実行しながら、ブーストフォルダーも含めます。下記の注2を参照してください

-リンカーの場合は、General ..などは、connector/lib/optのoptフォルダーを使用します。

* [Note 2] * 2回目のインクルードが発生する必要があり、boostライブラリvariant.hppからインクルードする必要があります。これは上記と同じように行われ、boost Zipから抽出したメインフォルダを追加しますboost、lib、またはboostmainfolder/boostにあるサブフォルダ「バリアント」ではなく、ダウンロードします。

次へ:

次に私が思うのは、静的ビルドです。まあ、とにかくやったことです。それに従います。

次に、ビルド/コンパイルします。 LNKエラーが表示されます(編集:ideをvisual studio 2008に変更すると消えました)。私は自分でコネクタを構築する必要があると思います(Visual Studio 2010でこれを行うとリンクエラーが消えるはずです)が、木曜日からこれを機能させるために取り組んでいるので、これを見る動機があるかどうかがわかりますおやすみなさいの睡眠の後(そしてやった:))。

6
Alan Ball

ビルドを機能させるには、-lmysqlcppconnをビルドに含める必要がありました。

3
Nick Kotenberg