46

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

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

4

4 に答える 4

40

ここにあります

/* 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;
}
于 2013-05-07T17:16:39.203 に答える
12

最後に、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" 
于 2014-05-07T04:40:32.280 に答える
7

はい、mysql c++ コネクタ ライブラリが必要です。以下で、mysql 開発者によって提供された例を機能させる方法を説明します。

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

上記の例を機能させようとしているときに、mysql dev Web サイトへの変更による問題からここにいることに気づきました。まだコメントできないため、これを回答として書いて申し訳ありません。何をすべきかを発見して解決策を見つけたら、これを編集して、将来の開発者を支援できるようにします。とにかく、コメントとして適合していません、ハハ)

「例」への @hd1 リンクが機能しなくなりました。リンクをたどると、メインのマニュアルへのリンクを提供するページが表示されます。メインのマニュアルは良いリファレンスですが、かなり古くて時代遅れのようで、新しい開発者にとっては難しいようです.

@hd1 のリンクは移動しました。記事名だけを残して URL コンポーネントを削除することにより、クイック検索で見つけることができます 。 -cpp-examples-complete-example-1.html

7.5 MySQL Connector/C++ 完全な例 1 を機能させる

ダウンロード:

- zip ではなく、インストーラー パッケージを選択します。

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

次に進みます:

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

-Boost ライブラリを C ドライブに展開します。

次:

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

-最初: 変更

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

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

その小さな二重矢印が何のためのものかはわかりませんが、それは c++ の一部ではないと思います

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

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

その第5章に従うだけで、

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

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

-そして、リンカー、一般などについては、connector/lib/opt の opt フォルダーを使用します。

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

次:

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

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

于 2014-03-14T21:28:59.777 に答える