2012-04-20 15 views
7

SOLUCIÓN: He decidido hacer una guía paso a paso para personas que tienen los mismos problemas. No sé si esto soluciona completamente todo, pero sí permite compilar el fragmento de código que proporcionaré. Si hay algún error, por favor coméntelo para que pueda solucionarlo. Esto está destinado a ayudar a aquellos que en su mayoría abandonaron los intentos fallidos, y para ser sinceros, todo el proceso debería haber sido documentado. Lo siento por el largo post: PConector Mysql/C++ para Windows 2010 Express no compilando

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; 
} 

Debe obtener errores de int8_t. Haga doble clic en config.h ubicado en: c: \ mysql-connector-C++ - noinstall-1.1.0-win32 \ mysql-connector-C++ - noinstall-1.1.0-win32 \ include \ cppconn \ config.h. Haga doble clic en él para que aparezca. Ahora solo comente todos los typedefs, solo debería haber 8. Coloque libmysql.dll (dentro del Connector/C) y mysqlcppconn.dll (dentro del Connector/C++) dentro de la carpeta donde el compilador está generando su compilación. Cuando termine de guardar y ejecutar.

entradas antiguas No mire

He seguido los pasos indicados en este sitio textualmente: http://blog.ulf-wendel.de/?p=215 Pero todavía estoy recibiendo un error de compilación. No soy nuevo para vincular bibliotecas, o incluir directorios, pero podría usar un nuevo superhéroe que haya hecho aplicaciones con mysql connector/C++ con 2010 express ... para hacer un simple ejemplo de KISS. He estado rechinando los dientes todo el día. Ejemplo Fuente: http://www.tidytutorials.com/2009/07/mysql-connector-c-example-windows-clexe.html (con cambio de base de datos)

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; 
} 

UPDATE: I han seguido este también: http://forums.mysql.com/read.php?167,492097,492097#msg-492097 I incluso se utiliza el C++, y los conectores C (construye por separado), junto con las dos pruebas con cada 64, y 32 bits versiones (un total de 4 pruebas). He descargado el impulso y lo he vinculado. El nuevo código que estoy usando lo publicaré a continuación, que proviene del sitio web oficial de MySQL. Ambas compilaciones producen los MISMOS errores.

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

ERRORES PARA CONSTRUIR 64 PRUEBA: (I fuerza incluyen la prueba de error de 32 bits de construcción, si necesita proporcionar Ill)

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 ========== 

ayuda se agradece!

ACTUALIZACIÓN 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 Este tipo parece pensar que es porque config.h entra en conflicto con stdint.h en la compilación porque en config.h hay un #typedef para int8_t. Tiene que haber una solución para esto. Ill incluso tomar otras librerías (gratuitas) que puedan conectarse a una base de datos MySQL local, pero estoy realmente ansioso por resolver esto para ayudar a todos.

+0

¿trató de añadir una dependencia biblioteca adicional para libmysql.lib? Puede descargarlo desde aquí: http://dev.mysql.com/downloads/connector/c/ –

+0

Sí.Esta es mi segunda aventura tratando de hacerlo funcionar. Y la segunda vez que he perdido. – user1328762

+1

'La razón por la que 62bit no funciona' ¿Fue realmente una copia y pega de la salida? No me sorprendería que alguien en Microsoft escribiera una declaración tan incorrecta, pero me preguntaba ... ¿Por qué su PREGUNTA comienza con "SOLUCIÓN"? Si tenía una respuesta que funciona, entonces debe escribir una respuesta a su propia pregunta. –

Respuesta

0

Dado que hay muchas preguntas sobre el conector C++ y MySQL, y es real Es difícil hacerlo funcionar, responderé a esta pregunta, incluso esto fue preguntado hace 1 año.

solución es bastante fácil, lo único que tiene que hacer es comentar todos de typedef en cppcon archivo/config.hy

Cuestiones relacionadas