Cool C/C++

Programacion en C/C++

Home Tutoriales Programación C/C++ MySQL con Dev-C++ - Funciones básicas para interacción con MySQL
MySQL con Dev-C++ - Funciones básicas para interacción con MySQL PDF Imprimir E-mail
Escrito por adrianvaca   
Domingo, 20 de Marzo de 2011 19:46
Indice del artículo
MySQL con Dev-C++
Instalación de MySQL
Instalación de MySQL-Front
Instalación de la librería para interacción con MySQL
Funciones básicas para interacción con MySQL
Proyecto de prueba en Dev-C++
Inserción, Actualización y eliminación de datos (Sistema de altas y bajas)
Todas las páginas


Hay al menos 4 pasos que siempre haremos cuando trabajemos con MySQL, estos son:


  1. Inicializar un objeto de tipo MYSQL usando mysql_init

  2. Conectarnos a MySQL usando mysql_real_connect

  3. Realizar operaciones con la base de datos

  4. Cerrar la conexión usando mysql_close



Para una referencia completa de todas las funciones para acceso a una base de MySQL se encuentra en este archivo (manual_mysql.zip)

A continuación vamos a detallara las funciones más importantes, las cuales está disponibles con la instalación de la librería anterior:



Función

MYSQL *mysql_init(MYSQL *objDatos


Descripción

Inicializa un objeto de tipo MYSQL y lo deja listo para ser usado con mysql_real_connect y establecer una conexión. Si mysql es un puntero NULL la función asigna la memoria, iniciliza y retorna un nuevo objeto. En caso contrario el objeto es inicilizado y se retorna la dirección del mismo. Si mysql_init asigna memoria a un nuevo objeto, esta será liberada cuando se llame a mysql_close para cerra la conexión.

Valor de retorno

Un puntero a un objeto de tipo MYSQL, si no hay memoria retorna NULL.

Ejemplo

MYSQL *objDatos;
 
// Intentar iniciar MySQL:
if(!(objDatos = mysql_init(0))) {
   // Imposible crear el objeto objMySQL
   return 1;
}



Función

MYSQL *mysql_real_connect (MYSQL *objDatos, const char *host,
 const 
char *user, const char *passwd,
 const 
char *dbunsigned int port, const char *unix_socketunsigned long client_flag


Descripción

Intenta establecer una conexión con el servidor MySQL, los parámetros son:


  1. Puntero a objeto de tipo MYSQL, iniciado antes con mysql_init

  2. El nombre de la máquina o número ip del servidor de MySQL. Podemos ingresar localhost para hacer referencia a la máquina local.

  3. El nombre de usuario. Bajo Unix es el usuario logeado actualmente, esto se indica con NULL. Bajo Windows ODBC debe ser ingresado.

  4. La contraseña del usuario.

  5. Base de datos por defecto, para no especificar base ingresamos NULL

  6. El número de puerto usado para la conexión TCP/IP, es mejor ingresar MYSQL_PORT para usar el valor por defecto.

  7. Socket Unix, para conexiones locales colocar NULL.

  8. Usualmente es 0.


Valor de retorno

Si retorna NULL indica que no se pudo establecer la conexión.

Ejemplo

if(!mysql_real_connect(objDatos, NULL, "usuario", "clave", "base_ejemplo", MYSQL_PORT, NULL, 0)) {
      // No se puede conectar con el servidor en el puerto especificado.
      cout << "Imposible conectar con servidor mysql en el puerto "
           << MYSQL_PORT << endl;
      mysql_close(objDatos);
      return 1;
}



Función

void mysql_close(MYSQL *objDatos


Descripción

Cierra una conexión previamente abierta. Libera la memoria asignada para la conexión

Valor de retorno

Ninguno

Ejemplo

mysql_close(objDatos);



Función

int mysql_ping(MYSQL *objDatos


Descripción

Chequea si la conexión del servidor está activa. Si la conexión no está activa automáticamente intenta reconectarse. Esto puede ser usado si no interactuamos con el servidor por un largo período de tiempo
Con esto no tendremos problemas y todo irá bien.

Valor de retorno

0 si el servidor está arriba. Distinto de 0 sdi ocurrió algún error.

Ejemplo

if(mysql_ping(objDatos)) {
      cout << "Error: conexión imposible" << endl;
      mysql_close(objDatos);
}



Función

const char *mysql_error(MYSQL *objDatos


Descripción

Retorna un string que contiene el mensaje de error para la función más recientemente invocada. Si la función falla el valor de retorno debería ser el error previo. Si no hay error retorna un string vacío. Un regla a tomar en cuenta es que después de llamara auna función que interactúa con MySQL se llame a mysql_error para saber si ocurió o no algún error.

Valor de retorno

Un string con la descripción del error.

Ejemplo

if(mysql_error(objDatos)[0] != '\0')
{
    // Ocurrio un error
}



Función

int mysql_select_db(MYSQL *objDatos, const char *db


Descripción

Hace que la base de datos especificada por db sea la base actual de la conexión. En consultas subsecuentes, será utilizada dicha base. mysql_select_db falla si el usuario especificado no tiene permisos para usar la base.

Valor de retorno

0 si hay éxito. Distinto de 0 en caso de error.

Ejemplo

if(mysql_select_db(objDatos, "base_ejemplo")) {
      // Error al seleccionar base de datos.
      cout << "ERROR: " <<  mysql_error(objDatos) << endl;
      mysql_close(objDatos);
      rewind(stdin);
      getchar();
      return 2;
}



Función

int mysql_query(MYSQL *objDatos, const char *query


Descripción

Ejecuta una consulta SQL. Debe ser sólo una instrucción. No se puede usar para consultas que tienen datos binarios. Se puede usar para ejecutar instrucciones SELECT, INSERT o UPDATE

Valor de retorno

0 si hay éxito. Distinto de 0 en caso de error.

Ejemplo

// Hacer una consulta con el comando "SELECT * FROM personas":
if(mysql_query(objDatos, "SELECT * FROM personas")) {
      // Error al realizar la consulta:
      cout << "ERROR: " <<  mysql_error(objDatos) << endl;
      mysql_close(objDatos);
      rewind(stdin);
      getchar();
      return 2;
}



Función

MYSQL_RES *mysql_store_result(MYSQL *objDatos


Descripción

Se debe llamar a mysql_store_result o mysql_use_result para cada consulta que exitósamente obtuvo datos. No se debe llamar a mysql_store_result o mysql_use_result para otras consultas. mysql_store_result lee el conjunto completo de resultados y lo coloca en una estructura. Retorna NULL si la cinsulta no devuelve resultados, por ejemplo una instrucción INSERT. Después de usarla se debe llamar a mysql_free_result para liebrar recursos.

Valor de retorno

Una estructura MYSQL_RES con los resultados o NULL si hay algune error.

Ejemplo

// Almacenar el resultado de la consulta, lo necesitaremos después:
if((res = mysql_store_result(objDatos))) {
   // Procesar resultados
   ...
   // Liberar el resultado de la consulta:
   mysql_free_result(res);
}



Función

unsigned long mysql_num_rows(MYSQL_RES *res


Descripción

Retorna el número de filas en el conjunto de resultados

Valor de retorno

El número de filas

Ejemplo

if((res = mysql_store_result(objDatos))) {
   // Numero de filas
   int i = (int) mysql_num_rows(res);
   // Liberar el resultado de la consulta:
   mysql_free_result(res);
}



Función

unsigned long mysql_num_fields(MYSQL_RES *result


Descripción

Retorna el número de columnas en el conjunto de resultados.

Valor de retorno

El número de columnas

Ejemplo

if((res = mysql_store_result(objDatos))) {
   // Numero de columnas
   int j = (int) mysql_num_fields(res);
   // Liberar el resultado de la consulta:
   mysql_free_result(res);
}


Ejemplo

Obtener el número de filas y columas

   i = (int) mysql_num_rows(res);
   j = (int) mysql_num_fields(res);
   // Mostrar el número de registros seleccionados:
   cout << "Consulta:  SELECT * FROM personas" << endl;
   cout << "Numero de filas encontradas:  " << i << endl;
   cout << "Numero de columnas por fila:  " << j << endl;



Función

MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *res


Descripción

Retorna la definición de una de las columnas como una estructura de tipo MYSQL_FIELD Se puede llamar sucesivamente para obtener información de todas las columnas.

Valor de retorno

Una estructura de tipo MYSQL_FIELD para la columna actual o NULL si no faltan columnas.

Ejemplo

for(int l = 0; l < j; l++) {
      columna = mysql_fetch_field(res);
      cout << "Nombre: " << columna->name << endl;
      cout << "Longitud: " << columna->length << endl;
      cout << "Valor por defecto: " << (columna->def ? columna->def : "NULL") << endl;
}



Función

MYSQL_ROW mysql_fetch_row(MYSQL_RES *res


Descripción

Obtiene la siguiente fila de un conjunto de resultados. Retorna nulo si no hay más filas.

Valor de retorno

Una estructura de tipo MYSQL_ROW o NULL si no hay filas o si ocurrió algún error.

Ejemplo

for(l = 0; l < i; l++) {
      row = mysql_fetch_row(res);
      cout << "Registro no. " << l+1 << endl;
      // Mostrar cada campo:
      for(k = 0 ; k < j ; k++)
         cout << ((row[k]==NULL) ? "NULL" : row[k]) << endl;
}



Función

unsigned long *mysql_fetch_lengths(MYSQL_RES *res


Descripción

Retorna la longitud de las columnas para la fila actual. Para columnas que contienen NULL retorna 0

Valor de retorno

Un arreglo de tipo unsigned long que representa el tamaño de cada columna o NULL si hay error.

Ejemplo

// Leer registro a registro y mostrar:
   l=1;
   for(l = 0; l < i; l++) {
      row = mysql_fetch_row(res);
      lon = mysql_fetch_lengths(res);
      cout << "Registro no. " << l+1 << endl;
      // Mostrar cada campo y su longitud:
      for(k = 0 ; k < j ; k++) {
         cout << ((row[k]==NULL) ? "NULL" : row[k]);
         cout << " longitud: " << lon[k] << endl;
      }
   }



Función

void mysql_data_seek(MYSQL_RES *resunsigned long offset


Descripción

mysql_fetch_row permite acceder a filas en forma secuencial, pero mysql_data_seek busca una fila determinada en un conjunto de resultados. El valor de offset debe estar entre 0 y mysql_num_rows(res)-1. Esta función precisa el conjunto completo de resultados, es decir debe usarse en conjunto con mysql_store_result y NO debe usarse con mysql_use_result.

Valor de retorno

Ninguno.

Ejemplo

// 3ª fila:
   mysql_data_seek(res, 2);
   row = mysql_fetch_row(res);
   cout << "Tercera fila" << endl;
   for(k = 0 ; k < j ; k++) {
      cout << ((row[k]==NULL) ? "NULL" : row[k]) << endl;
   }



Función

MYSQL_RES *mysql_use_result(MYSQL *objDatos


Descripción

Para conjuntos muy grandes de rsultados no es conveniente almacenar todo el conjunto de datos ya que esto consume memoria extra, es mejor acceder a los registros uno por uno. Se debe llamar a mysql_store_result o mysql_use_result para cada consulta que exitósamente obtuvo datos. Se debe llamar a esta función para liberra recursos luego de ejecutar una sentencia o consulta. No se debe llamar a mysql_store_result o mysql_use_result para otras consultas.

Valor de retorno

Una estructura de tipo MYSQL_RES o NULL si hay error.

Ejemplo

// El mismo proceso usando mysql_use_result:
   // Hacer una consulta con el comando "SELECT * FROM personas":
   if(mysql_query(objDatos, "SELECT * FROM personas")) {
      // Error al realizar la consulta:
      cout << "ERROR: " <<  mysql_error(objDatos) << endl;
      mysql_close(objDatos);
      return 2;
   }
   if((res = mysql_use_result(objDatos))) {
      j = (int) mysql_num_fields(res);
      while(row = mysql_fetch_row(res)) {
         for(k = 0 ; k < j ; k++)
            cout << ((row[k]==NULL) ? "NULL" : row[k]) << endl;
      }

      // Liberar el resultado de la consulta:
      mysql_free_result(res);
   }




 
Otros artículos

Comentarios  

 
0 #3 Roberto Carlos Silva Orozco 29-02-2020 19:44
Cito a may:
Hola, Buenas tardes.
Tengo problemas con el #include de mysql, me dice que no encuentra el archivo ni el directorio y ya hice todo lo que se tenia que hacer.
Espero y puedan ayudarme, gracias.

Justo tuve ese problema, debes de incluir en tu proyecto en la parte de directorios include el include de DEVCPP.
Citar
 
 
0 #2 Luis 28-10-2019 17:12
Cito a may:
Hola, Buenas tardes.
Tengo problemas con el #include de mysql, me dice que no encuentra el archivo ni el directorio y ya hice todo lo que se tenia que hacer.
Espero y puedan ayudarme, gracias.

Prueba instalar DEV c++ 4.9. Eso me funcionó
Citar
 
 
0 #1 may 22-10-2018 15:56
Hola, Buenas tardes.
Tengo problemas con el #include de mysql, me dice que no encuentra el archivo ni el directorio y ya hice todo lo que se tenia que hacer.
Espero y puedan ayudarme, gracias.
Citar
 

Escribir un comentario


Código de seguridad
Refescar