Conectar C++ con MySQL

sacker

Hola,

alguien podría decirme, por favor, como es un esqueleto básico de programa en C++ para conectarse a una base de datos MySQL?

Yo lo he intentando con el Connector/C++ de mysql.com, he googleado y he encontrado unas 3 variantes de hacer lo mismo y con ninguna consigo compilar. Mañana os pegaré lo que tengo y cómo intento compilarlo y a ver si vosotros veis dónde meto la pata, pero si ya de antemano alguien sabe de una librería que vaya bien, y lo básico, como hacer un connect y un insert, que tienen que ser 4 lineas, se lo agradecería enormemente.

Gracias de antemano

:ninjaedit: Iré añadiendo lo que te me dejo en el tintero :palm:

  • Es bajo linux (una ubuntu server en concreto)
LOc0

¿Esto no te funciona?

http://www.latindevelopers.com/ivancp/2006/02/mysql-desde-cpp/

Salu2 ;)

NeB1

al compilar le pasas todos los parámetros necesarios? no macuerdo cuales eran, pero yo tuve problemas por eso.

sacker

#2 lol, eso no usa ningún driver ni nada, todo con el mismo MySQL?

en cuanto salga del curro pruebo y os digo : >

sacker
bueno, conseguí que funcionara. Lo que no consigo ahora es hacer "inserts" pasándole parámetros. He leído que tengo que utilizar un PreparedStatement, que en teoría se hace así:

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

   prep_stmt = con->prepareStatement("INSERT INTO test(id, label) VALUES (?, ?)");
   prep_stmt->setInt(1, 1);
   prep_stmt->setString(2, "a");
   prep_stmt->execute();

y el compilador me dice:

cliente.cpp: In function ?int main()?:
cliente.cpp:89: error: invalid use of incomplete type ?struct sql::PreparedStatement?
/usr/local/include/cppconn/connection.h:44: error: forward declaration of ?struct sql::PreparedStatement?
cliente.cpp:90: error: invalid use of incomplete type ?struct sql::PreparedStatement?
/usr/local/include/cppconn/connection.h:44: error: forward declaration of ?struct sql::PreparedStatement?
cliente.cpp:91: error: invalid use of incomplete type ?struct sql::PreparedStatement?
/usr/local/include/cppconn/connection.h:44: error: forward declaration of ?struct sql::PreparedStatement?
cliente.cpp:130: warning: possible problem detected in invocation of delete operator:
cliente.cpp:28: warning: ?prep_stmt? has incomplete type
/usr/local/include/cppconn/connection.h:44: warning: forward declaration of ?struct sql::PreparedStatement?
cliente.cpp:130: note: neither the destructor nor the class-specific operator delete will be
called, even if they are declared when the class is defined.


he googleado muchísimo y no encuentro que puede ser :/
BLZKZ

#5 busca manuales sobre el conector odbc para c++ como http://www.dreamincode.net/forums/topic/21309-cpp-with-odbc-open-database-connectivity/

Te serán muy utiles

sacker

#6 yo utilizo este conector -> http://www.mysql.com/downloads/connector/cpp/ (el "Connector/C++" )

aquí está toda la documentación -> http://forge.mysql.com/wiki/Connector_C%2B%2B#Getting_Started:_Usage_Examples

y la parte que me interesa (pasarle parámetros a un insert) diría que es:

http://forge.mysql.com/wiki/Connector_C%2B%2B#Using_Prepared_Statements

lo he hecho todo como los ejemplos y me sigue dando los errores

"invalid use of incomplete type 
struct sql::PreparedStatement"
(y como se supone que lo tengo que usar?)


"/usr/local/include/cppconn/connection.h:44: error: forward declaration of struct sql::PreparedStatement"

forward declaration? es que está mal implementado? !_!

tiene que haber una librería que no linko bien o algo :(

por cierto, compilo así:

g++ -I/home/greenc/alex/boost_compilado/include /usr/local/lib/libmysqlcppconn.so -o cliente.exe cliente.cpp

igual me hace falta otra aparte de libmysqlcppconn.so, en fin seguiré probando


Lo que necesito hacer, que igual no me he explicado muy bien:

Si tengo un

int a = 2;
int b = 3;

y quiero hacer un insert de este estilo

INSERT INTO mitabla (dato1, dato2) VALUES (aqui_quiero_el_valor_de_a, aqui_el_de_b);

como meto los valores de las variables a y b en la query? : /

si alguien sabe seguro como puedo hacerlo con otro librería en concreto, que lo diga! sería un marronazo a estas alturas, pero si funciona...

dovitodkb

Mmmm esto me interesa para proyecto fin de año. No tengo ni idea, solo vengo a ver.

BLZKZ

#7 es el que yo decia xD

por cierto que es eso de compilar .exe en linux? los .exe que compiles en linux no los ejecutas en windows xD

sacker

#9 ya lo sé, es costumbre. Por no dejarlos sin extensión vaya

plz, alguien debe saber lo que pido en #7. Si es del abc de conectar a una BD, para cualquiera con experiencia seguro que es una chorrada, y yo necesito que me funcione para ya : /

NeB1

#10 en que punto has hecho el connect? o sea, en que linea le dices los datos de tu base de datos?

sacker

por si a alguien le interesa, después de 6 largas horas de prueba-google-prueba-error, he dado con un artículo que me ha salvado la vida -> http://dev.mysql.com/tech-resources/articles/mysql-connector-cpp.html

concretamente, los includes del ejemplo mas un "-I/ruta a los includes del connector en mi sistema" en la línea del g++

NeB1

#12 eso es lo que te comentaba en #3 que me dió problemas una vez xD

Buffoncete

mírate OCILIB, yo lo usé el año pasado para conectar C++ con Oracle pero creo que también estaba disponible para MySQL.

Y como todo, prográmalo bien, utiliza el patrón DAO ;)

Usuarios habituales

  • Buffoncete
  • NeB1
  • sacker
  • BLZKZ
  • dovitodkb
  • LOc0