Leer datos MySQL desde C++ sobre Linux

Resulta que algunas veces es necesario acceder desde C/C++ a MySQL, razones hay muchas…. el asunto es como hacerlo.

Antes de hacer cualquier cosa debemos instalar las librerías de desarrollo de MySQL:

sudo apt-get install libmysqlclient-dev

Todos los archivos que necesitaremos van a estar ubicados en /usr/include/mysql y /usr/lib/mysql , los parámetros para compilar un archivo simple es como sigue:

gcc archivo.cpp \
           -o archivo \
           -I/usr/include/mysql -L/usr/lib/mysql \
           -lmysqlclient -lstdc++ -lz

Una breve descripción de los parámetros:

  • -o (output) indica el nombre que va a tener el archivo de resultado
  • -I le dice al compilador que incluya una ruta adicional para los archivos de inclusión
  • -L le dice al enlazador que incluya una ruta adicional para los archivos de librería dependientes
  • -l (ele minuscula) le dice al enlazador que incluya la librería especificada
  • \ es el caracter que usamos en la linea de comando para ejecutar varias lineas como una sola expresión.

Escribí para ustedes un código de ejemplo, no es gran cosa pero les va a dar luces para sus proyectos:

//conexion.cpp
#include <iostream>
#include <string.h>
#include <mysql.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    MYSQL mysql;
 
    mysql_init(&mysql);
    if (!mysql_real_connect(&mysql
		,"localhost"
		,"root"
		,""
		,"ciudades",0,NULL,0))
    {
        cerr<<"Horror ! : "
	    <<mysql_error(&mysql);
    }
    const char *query = "select * from ciudades";
 
    mysql_real_query(&mysql,query,strlen(query));
    MYSQL_RES *res = mysql_store_result(&mysql);
    MYSQL_ROW row;
 
    while ((row = mysql_fetch_row(res)))
    {
            cout << row[0] << " " << row[1] << endl;
    }
 
    mysql_close(&mysql);
    return 0;
}

El resultado de la ejecución es:

ivancp@ubuntu$ ./conexion
01 AMAZONAS
02 ANCASH
03 APURIMAC
04 AREQUIPA
05 AYACUCHO
06 CAJAMARCA
07 CALLAO
08 CUSCO
09 HUANCAVELICA
10 HUANUCO
11 ICA
12 JUNIN
13 LA LIBERTAD
14 LAMBAYEQUE
15 LIMA
16 LORETO
17 MADRE DE DIOS
18 MOQUEGUA
19 PASCO
20 PIURA
21 PUNO
22 SAN MARTIN
23 TACNA
24 TUMBES
25 UCAYALI

Espero les sirva mucho!

Entradas relacionadas :

  • ¿No les ha dado pereza escribir, en la linea de comando, todo lo necesario para conectarse a un servidor MySQL? Puede que tome menos de un minuto, pero algunas veces un minuto es vital (sobre t ...

  • Seguramente muchos de ustedes han necesitado de algun archivo que esta contenido en un RPM y no han encontrado la manera de extraerlo. Existe un programita llamado rpm2cpio. Por ejemplo lo que yo ...

  • Los usuarios Windows conocemos a la perfección como montar una unidad de red, pero en Linux la cosa es un tanto mas complicada, pero no difícil. La primera opción que tenemos es abrir directame ...

  • Muchos prefieren hacer backups de su valiosa data en formatos predefinidos por el gestor (.backup, .dbf, etc...) por mi parte prefiero el formato SQL guardado en un archivo de texto. MySQL no t ...

  • El motor FEDERATED de MySQL, aunque no es muy versátil, puede resultar útil, por ejemplo, para conectarnos directamente a una tabla en otro servidor MySQL sin necesidad de un intermediario, como u ...

16 Responses to Leer datos MySQL desde C++ sobre Linux

  1. Interesante tip, aunke hace buen tiempo que deje de programar aplicaciones de pc, ahora estoy mas embebido en aplicaciones web(php), pero tmb soy muy amante de tuxito, y por lo mismo, voy hacer la prueba.

    PD: de casualidad encontre tu blog (http://www.populicias.com/verNoticia.php?id=767&nv=20), estoy suscrito a ww.populicias.com y ahi estabas, jajaja, jajaj, y el copyright. De todos modos te agregue a mi lector web(www.bloglines.com), pues tienes algunos post muy inte interesantes, solo saludos. bye

  2. hola
    Deseaba hacer una coneccion pero usando c++ builder je luego descubri que no se podia por el tipo de formato como la hago sin usar odc o como incluyo la libreria mysql

  3. muy bueno!, es justo lo que necesitaba, pensaba que usar una base mysql en c seria un dolor de cabeza, pero es mas facil de lo que pensaba,mil gracias!!

  4. Muy bueno, sólo que aún con algunos errores

  5. buena, con esto me inicié en este campo, claro corrigiendo los errores necesarios e instalando libmyqsl++.

  6. Muy bien! Justo lo que necesitaba… solamente tenía informacion sobre un programa bajo c pero no lo conseguia compilar en c++ utilizando mis clases. Gracias!

  7. Exelente amigo

    De casualidad puedes publicar el codigo para
    acer la inserccion de datos en C/C++

    nos vemos en el futuro…!

  8. #include
    #include

    std::string query(“SELECT * FROM maestro_departamentos”);

    mysql_real_query(&mysql, query.c_str(), query.size());

    Es la adaptacion para usar las librerias de C++.
    PD: si no se usa ‘using namespace std;’ al principio, hay que especificarlo antes de usar std::cout y std::cerr.

    Muchas gracias por el post, es muy claro y util. Saludos!

  9. HOLA amigo quisiera saber donde consigues los manuales donde aprendes eso porfavor gracias.

  10. Estoy buscando informacion acerca de como hacer la conexion y veo que es muy sencillo, pero podrias hacerlo mas paso a paso? por ejemplo desde crear los ficheros hasta la compilacion. No veo como hiciste la base de datos (aunque es sencilla, no se como la hiciste), tampoco como lo guardaste ni donde y documentar un poco mas el archivo .c Esta muy bien, solo que quienes no tenemos idea de como hacer la aplicacion y queremos saberlo nos volvemos un 8 Gracias!

  11. muy bueno pero tengo una pregunta ammmm, como haria con el comando para que me funcione en centos ya que si no me equiboco ese comando apt que estas usando para las librerias esta para ubunto me gustaria saber como podria poner el comando para descargar en centos gracias

    • El comando para Centos me parece que es:

      yum install mysql-devel

      por favor intenta y nos cuentas como te fue.

      • gracias gracias si funciona ya comenzo a descargar las librerias con ese comando

        • mas bien una ultima pregunta ammm para activar las librerias ahora entonces como seria? o.o y por ejemplo si desearia conectar la base de datos remotamente de otro linux tendria que descargar otra libreria o con esa funciona?, porque para que funcione la conexion remota de la base de datos tendria que cambiar la parte del codigo que dice localhost por el ip o se le aumenta algo mas?.
          te doy muchas gracias de antemano.

          • Si!, solo tienes que poner el numero de IP del host remoto y tambien el usuario y password… pero el host remoto debe estar configurado para que acepte conexiones temotas via tcp

  12. Pingback: Probando UDFs para MySQL: Title Case | Fatal exception

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

Go back to top