7

解決策: 同じ問題を抱えている人のために、段階的なガイドを作成することにしました。これですべてが完全に修正されるかどうかはわかりませんが、提供するコード スニペットをコンパイルできます。エラーがある場合は、コメントしてください。修正できます。これは、試みに失敗してほとんどあきらめてしまった人を助けることを目的としています。率直に言って、プロセス全体を文書化する必要がありました。長文すみません:P

STEP BY STEP FOR SETTING UP MYSQL CONNECTOR/C++ FOR 2010 MICROSOFT VISUAL C++ EXPRESS:
FILES NEEDED:
Windows x86 32 Bit ZIP: Connector/C++ -> http://dev.mysql.com/downloads/connector/cpp/
Windows X86 32 Bit ZIP: Connector/C -> http://dev.mysql.com/downloads/connector/c/
BOOST -> http://www.boost.org/users/download/

The reason why 62bit doesn't work is because you are using the express edition.  After you have downloaded all those files, extract them.  I keep mine in C (for ease of access).  Now open up MVC++ 2010 EXPRESS.
File -> New -> Project
Win32 Console Application
Next
Check Empty project
Finish
Create your first .cpp.  I call mine main.cpp
Project -> Properties
C/C++ -> General -> Additional Include Directories -> C:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\include
C/C++ -> General -> Additional Include Directories -> C:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\include\cppconn
C/C++ -> General -> Additional Include Directories -> C:\boost_1_49_0
Linker -> General -> Additional Library Directories -> C:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\lib
Linker -> General -> Additional Library Directories -> C:\mysql-connector-c-noinstall-6.0.2-win32\mysql-connector-c-noinstall-6.0.2-win32\lib
The reason why we downloaded the Connector/C is because it has two files we need: libmysql.lib and libmysql.dll
Linker -> Input -> Additional Dependencies -> mysqlcppconn.lib
Linker -> Input -> Additional Dependencies -> libmysql.lib

If you change to Release, youll have to enter in the information again.
In your main.cpp place the following code and build it:

=

/* Copyright 2008, 2010, Oracle and/or its affiliates. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

There are special exceptions to the terms and conditions of the GPL
as it is applied to this software. View the full text of the
exception in file EXCEPTIONS-CONNECTOR-C++ in the directory of this
software distribution.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

/* 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", "YOUR USERNAME", "YOUR PASSWORD");
  /* Connect to the MySQL test database */
  con->setSchema("YOUR DATABASE");

  stmt = con->createStatement();
  res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
  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;

int a;      // hangs
cin >> a;

return EXIT_SUCCESS;
}

int8_t のエラーが発生するはずです。c:\mysql-connector-c++-noinstall-1.1.0-win32\mysql-connector-c++-noinstall-1.1.0-win32\include\cppconn\config.h にある config.h をダブルクリックします。それをダブルクリックして表示します。ここで、すべての typedef をコメント アウトして、8 だけにする必要があります。libmysql.dll (Connector/C 内) と mysqlcppconn.dll (Connector/C++ 内) を、コンパイラがビルドを出力するフォルダー内に配置します。終了したら、保存して実行します。

古い投稿は見ないでください

このサイトの手順を逐語的に実行しました: http://blog.ulf-wendel.de/?p=215 しかし、まだコンパイル エラーが発生します。私はライブラリをリンクしたり、ディレクトリを含めたりするのは初めてではありませんが、2010 Express で mysql コネクタ/c++ を使用してアプリケーションを作成した新しいスーパーヒーローを使用して、簡単な KISS の例を作成できます。私は一日中歯ぎしりをしています。ソース例: http://www.tidytutorials.com/2009/07/mysql-connector-c-example-windows-clexe.html (データベースを変更)

1>main.obj : error LNK2019: unresolved external symbol __imp__get_driver_instance referenced in function _main

#include <stdlib.h>
#include <iostream>
using namespace std;
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>

int main(){

    sql::Driver *driver;
    sql::Connection *con;
    sql::Statement *stmt;
    sql::ResultSet *res;
    sql::PreparedStatement *pstmt;

    try{
        driver = get_driver_instance();
        con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
        con->setSchema("foxlogin");

        stmt = con->createStatement();
        stmt->execute("insert into example values(4,'four'),(5, 'five')");
        delete stmt;

        pstmt = con->prepareStatement("select * from example");
        res = pstmt->executeQuery();
        while (res->next())
            std::cout<<res->getInt("id")<<"  "<<res->getString("data")<<std::endl;
        delete res;
        delete pstmt;

        pstmt = con->prepareStatement("delete from example where id=?");
        pstmt->setInt(1,4);
        pstmt->executeUpdate();
        pstmt->setInt(1,5);
        pstmt->executeUpdate();

        delete pstmt;

        delete con;    
    }catch(sql::SQLException &e){
        std::cout<<e.what();
    }

    int a;      // hang
    cin >> a;

    return 0;
}

更新: 私もこれに従いました: http://forums.mysql.com/read.php?167,492097,492097#msg-492097 C++ と C コネクタ (個別のビルド) を使用し、それぞれのテストを両方とも使用しました。 64 および 32 ビット バージョン (合計 4 つのテスト)。ブーストをダウンロードしてリンクしました。私が使用している新しいコードは、公式の mysql Web サイトから取得したものを以下に投稿します。両方のビルドで同じエラーが発生します。

/* Copyright 2008, 2010, Oracle and/or its affiliates. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

There are special exceptions to the terms and conditions of the GPL
as it is applied to this software. View the full text of the
exception in file EXCEPTIONS-CONNECTOR-C++ in the directory of this
software distribution.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

/* 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");
  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;
}

64 テストのビルド エラー: (提供する必要がある場合は、32 ビットのビルド エラー テストは含めません)

   1>------ Build started: Project: erthwrthj, Configuration: Debug Win32 ------
    1>  main.cpp
    1>c:\mysql c++ 64\include\cppconn\sqlstring.h(36): warning C4251: 'sql::SQLString::realStr' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'sql::SQLString'
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>,
    1>              _Ax=std::allocator<char>
    1>          ]
    1>c:\mysql c++ 64\include\mysql_connection.h(156): warning C4251: 'sql::mysql::MySQL_Connection::proxy' : class 'boost::shared_ptr<T>' needs to have dll-interface to be used by clients of class 'sql::mysql::MySQL_Connection'
    1>          with
    1>          [
    1>              T=sql::mysql::NativeAPI::NativeConnectionWrapper
    1>          ]
    1>c:\mysql c++ 64\include\cppconn\exception.h(59): warning C4251: 'sql::SQLException::sql_state' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'sql::SQLException'
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>,
    1>              _Ax=std::allocator<char>
    1>          ]
    1>c:\mysql c++ 64\include\cppconn\config.h(60): error C2371: 'int8_t' : redefinition; different basic types
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdint.h(17) : see declaration of 'int8_t'
    1>c:\mysql c++ 64\include\cppconn\config.h(60): error C2371: 'int8_t' : redefinition; different basic types
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdint.h(17) : see declaration of 'int8_t'
    1>c:\users\null\documents\visual studio 2010\projects\erthwrthj\erthwrthj\main.cpp(74): error C2146: syntax error : missing ';' before identifier '»'
    1>c:\users\null\documents\visual studio 2010\projects\erthwrthj\erthwrthj\main.cpp(74): error C2065: '»' : undeclared identifier
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

助けていただければ幸いです!

更新 2: view_findpost_ p _1474626">http://www.dreamincode.net/forums/topic/253647-question-regarding-connecting-to-mysql-50-using-visual-studio-2010/page_ view_findpost_ p _1474626この男は、config.h に int8_t の #typedef があるため、コンパイル時に config.h が stdint.h と競合するためだと考えているようです.これに対する解決策が必要です.他のライブラリ(無料)を使用することもできます.ローカルの MySQL データベースに接続しますが、みんなを助けるためにこれを理解したいと思っています。

4

1 に答える 1

0

C++やMySQLのコネクタに関しては質問が多くて、動かすのが大変なので、1年前のような質問にもお答えします。

解決策は非常に簡単です。必要なのは、cppcon/config.h ファイル内のすべての typedef をコメントすることだけです。

于 2013-11-29T18:53:36.300 に答える