He visto muy pocos desarrollos en que usen base de datos como MYSQL que no estén ligados a la WEB ya sea con PHP (Principalmente) o ASP.NET, para escritorio lo más cercano es C#, sin embargo casi nada en los lenguajes tradicionales como C.
En este artículo mostrare como hacer conexiones a la base de datos, como agregarle un registro y luego consultarlo, para los que ya han conectado en PHP notaran que básicamente es igual, de hecho prácticamente las mismas funciones.
Antes de ejecutar este programa cree una base de datos en mi servidor llamada cmysql, del mismo valor cree el usuario y la clave, luego cree una tabla llamada tabla con 2 campos uno llamado visitante de tipo text y otro contador de tipo int ( que por cierto no va a contar )
El código fuente en C
#include <stdio.h>
#include <mysql.h>
int main ()
{
// Tipos de Mysql
MYSQL *conexion;
MYSQL_RES *R;
MYSQL_ROW COL;
// Variables String para
conexion, opcionales
char *servidor = “localhost”;
char *usuario = “cmysql”;
char *clave = “cmysql”;
char *db = “cmysql”;
// Inicializa ? JAJAJA OK,
la funcion es mas clara que el comentario
conexion = mysql_init(NULL);
// Se conecta a la DB con
las variables previas o usar aqui mismo STRINGs
mysql_real_connect(conexion,
servidor, usuario, clave, db, 0, NULL, 0);
// se agrega un registro por
cada ejecutsion del programa
mysql_query(conexion,
“insert into tabla (visitante,contador) values(‘Mysql C en
localhost’,100);”);
// Consulta de la tabla, en
esta y la linea a anterio igual podria usarse una varaible STRING para
el Query
mysql_query(conexion,
“select * from tabla;”);
// Resultados y ciclo para
mostrar el resultado, COL es de izquierda a derecha en la tabla
R =
mysql_use_result(conexion);
while ((COL =
mysql_fetch_row(R)) != NULL)
printf(“Visitante: %s Contador:
%s\n”,COL[0], COL[1]);
// Cerrar conexion a la DB
mysql_close(conexion);
return 0;
}
La salida esperada
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Consultando desde el cliente Mysql
mysql> insert into tabla (visitante,contador) values(‘Last Dragon’,1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from tabla;
+———————-+———-+
| visitante | contador |
+———————-+———-+
| Last Dragon | 1 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
+———————-+———-+
5 rows in set (0.00 sec)
mysql>
La compilación es algo aparatosa afortunadamente mysql incluye el comando mysql_config que dependiendo el parámetro nos entrega las banderas para el compilador
Mysql_config –cflags y mysql_config –libs
Tips bashero
Cualquier comando con un símbolo de dólar encerrado entre paréntesis arroja su salida al standart output, por ejemplo echo $(ls) daría un echo del echo del ls, mysql_config tira muchos parámetros asi que, podemos resumirlos con esto $(mysql_config –cflags) $(mysql_config –libs) al pasarlos directamente como parámetros de compilador
gcc cmysql.c $(mysql_config –cflags) $(mysql_config –libs) -o cmysql
Esta bonito el code, solo dos cosas (y viendome muy picky):
// Variables String para conexion, opcionales
No son strings, son punteros a char
// se agrega un registro por cada ejecutsion del programa
Aquí es cuando se nota cuando Bucio ah entrado en nuestras vidas 😛 : Ejecución, supongo el fallo fue por traducir “execution”
Por lo demás, buen post
Cómo se haría para un archivo de conexión sin tener que estar llamando en cada archivo la conexión.
tiene tiempo que queria hacer algo parecido, bueno ahora que veo tu ejemplo lo miro muy claro, buen code.
=)
Te la rifaste cuate, desde hace mucho quería conectar c con mysql y esto es lo que necesitaba.
Suerte.
Excelente.
Buen post, por cierto.
Me sirvió bastante, muchas gracias por el post.
Excelente!