Skip to content

Step by step guide for connecting and running queries to a MySQL/Maria database using the low level C API library

License

Notifications You must be signed in to change notification settings

DiracSpace/Embedded-SQL-in-C

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Práctica SQL embebido usando C

Requisitos

Si están en Windows, la instalación de la base de datos agregará las librerías necesarias para el manejo a bajo nivel con el que nosotros trabajaremos. Además, se ocupará instalar el compilador.

Primero, debemos crear un archivo sql.c o con algún nombre de su preferencia. Además agregamos librerías importantes.

#include <mysql/mysql.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

Creación de modelo

Crearemos una estructura de datos o struct como es mejor conocido. De esta forma, podemos invocar el modelo de datos desde cualquier función teniendo así los datos asignados o asignar nuevos datos.

struct connection_details
{
    char *server;
    char *user;
    char *password;
    char *database;
};

Conectando

Lo que haremos es crear una función separada que nos creará una conexión a la base de datos, y esta devolverá un pointer o puntero. Ahora, esto es básicamente una variable apuntando al espacio o registro dentro de nuestro proceso que tiene la conexión a la base de datos. Con esto, nos evitamos tener que estar agregando el código de conexión constantemente.

MYSQL* mysql_connection_setup(struct connection_details mysql_details)
{
    /* creating new instance */
    MYSQL *conn = mysql_init(NULL);

    /* connect to the database with the details */
    if (!mysql_real_connect(conn, mysql_details.server, mysql_details.user,
        mysql_details.password, mysql_details.database, 0, NULL, 0))
    {
        printf("Conection error : %s\n", mysql_error(conn));
        exit(1);
    }
    return conn;
};

Queries

Ahora, para también evitarnos seguir agregando código para nuestras consultas, vamos a crear una función que se encarga solamente de eso. Lo que haremos, es pasarle como parámetros el puntero donde se ubica nuestra conexión y la consulta. Esta devolverá nuestro resultado exitoso.

MYSQL_RES* mysql_perform_query(MYSQL *conn, char *query)
{
    if (mysql_query(conn, query))
    {
        printf("MySQL query error : %s\n", mysql_error(conn));
        exit(1);
    }
    return mysql_use_result(conn);
};

Función main()

Ya que tenemos lo anterior, podemos empezar con nuestro bloque principal de lógica. Creamos una función main() y retornamos un 0.

int main()
{
    return 0;
}

Ahora, debemos agregar lo esencial de la librería C API. Básicamente son punteros que después se les asignará la posición de nuestra creación de instancias.

MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;

Tenemos que asignar valores a nuestras propiedas de la struct para la información de la base de datos. Así podemos invocar las variables y sus valores en otras funciones.

// assign details to database
struct connection_details mysql_conn_string;
mysql_conn_string.server = "localhost";
mysql_conn_string.user = "operaciones";
mysql_conn_string.password = "prueba";
mysql_conn_string.database = "crud";

Procedemos a crear nuestra conexión invocando la función que hemos creado anteriormente, la cual devolverá el puntero y lo asignamos a nuestra instancia local de la función. La cual ahora estará apuntando a ese espacio de memoria.

// connecting to database with details
conn = mysql_connection_setup(mysql_conn_string);

Ahora sí, podemos realizar nuestra consulta. Como vemos a continuación, invocamos la función que creamos para realizar una consulta que tomará todos los nombres de nuestra tabla. Este se conoce como resultset o una serie de resultados. De la misma forma, hemos creado un puntero que ahora apunta a esa serie de resultados retornados.

res = mysql_perform_query(conn, "select nombre from usuarios;");

Necesitamos ahora ver esa serie de resultados. Por lo que pasamos a recorrer todos los valores e imprimirlos a consola.

// display query
printf("MySQL Tables in mysql database:\n");
while ((row = mysql_fetch_row(res)) !=NULL)
{
    printf("%s\n", row[0]);
}

Antes de terminar nuestra función, debemos ahora limpiar los punteros para después hacer otra consulta nueva.

// reset objects
mysql_free_result(res);
mysql_close(conn);

Ejecución del código

Información desde la base de datos

About

Step by step guide for connecting and running queries to a MySQL/Maria database using the low level C API library

Topics

Resources

License

Stars

Watchers

Forks

Languages