Al Muhdil Karim

Membuat Aplikasi Pengguna Menggunakan C Dan Mariadb

Requirement

Untuk berhubungan dengan mariadb, aplikasi c membutuhkan connector, dalam tutorial ini kita menggunakan connector

mariadb-libs 10.6.5-2

untuk installasinya pada arch linux bisa menggunakan perintah di bawah ini;

sudo pacman -S mariadb-libs

Membuat docker Volume

Volume di butuhkan untuk membuat data tersimpan secara permanen. Nah dalam tutorial ini kita akan membuat volume untuk pengembangan c_module_user,sehingga untuk mempermudah kita akan menyamkan namanya

docker volume create c_module_user

Selanjutnya kita akan mengecek apakah volume tersebut telah berhasil dibuat atau belum dengan perintah :

docker volume list | grep 'c_module_user'

Output dari command tersebut seharusnya adalah

[[email protected] modul_user]$ docker volume list | grep c_module_user
local     c_module_user

cara melihat ip container yang menjalankan mariadb

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [Nama container]

ganti nama container dengan container yang menjalankan mariadb, jika nama containernya c_module_user, maka perintah nya adalah

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' c_module_user

Membuat configurasi docker-compose

Dalam kasus ini kita menggunakan image mariadb untuk sebagai database yang di jalankan dalam docker. Oleh sebab itu, untuk memudahkan kita, kita bisa menggunakan docker compose, berikut ini adalah file configurasi untuk docker compose

version: '2.2.2'

services:
  db:
    image : mariadb:latest
    container_name : c_module_user
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: c_user_module
      MYSQL_USER: user_mod
      MYSQL_PASSWORD: test
      MYSQL_TCP_PORT: 3306
    ports:
      - "3306:3306"
    volumes:
      - c_module_user:/var/lib/mysql
volumes:
  c_module_user:

Untuk menjalankan configurasi tersebut, pertama sekali kita perlu membuat file configurasi dengan format .yml. dalam kasus ini kita akan membuat file dengan nama c_module_user.yml.

Setelah itu kita copy dan paste kofigurasi di atas kedalam file yang baru di buat dan save filenya.

setelah itu kita perlu membuild configurasi tersebut dengan command

docker-compose create

setelah proses build selesai, kita tinggal menjalankan nya dengan perintah

docker-compose start

Membuat file program test koneksi database

setelah aplikasi database selesai dibuat, selanjutnya kita akan membuat aplikasi sederhana untuk menguji koneksi ke database menggunakan bahasa pemograman c, pertama sekali kita buat file kosong dengan nama conn.c

selanjutnya copy dan paste script dibawah ini kedalam file yang baru saja kita buat.

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

int main(int argc, char **argv[])
{
  MYSQL *con = mysql_init(NULL);

  if (con == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      exit(1);
  }


  if(mysql_real_connect(con, "127.0.0.1", "user_mod", "test", "c_user_module", 3306, NULL, 0) == NULL)
  {
      fprintf(stderr, "%s\n", mysql_error(con));
      mysql_close(con);
      exit(1);
  }

  printf("The connection is open\n");

  mysql_close(con);
  exit(0);
}

selanjut save dan sebelum bisa menggunakan aplikasi kita perlu melakukan kompilasi aplikasi terlebih dahulu. Untuk kompilasi aplikasi, kita bisa menggunakan perintah berikut

gcc conn.c -o conn `mysql_config --cflags --libs`

setelah aplikasi selesai di komplasi, selanjut kita bisa menjalankan aplikasi dengan perintah berikut

./conn

Error

Jika terjadi error dalam proses compiling seperti contoh dibawah,

conn.c:(.text+0x15): undefined reference to `mysql_init'

berarti anda lupa menhubungkan library mariadbconnector pada saat build aplikasi. berikut ini contoh link library mariadb c connector

gcc -o <<OutputFile>> <<SourceFileName>> `mysql_config --cflags --libs`

jika kita ingin mencompile file conn.c menjadi aplikasi bernama test, maka kita bisa menggunakan contoh perintah di bawah ini

gcc conn.c -o test  `mysql_config --cflags --libs`

Referensi

https://zetcode.com/db/mysqlc/ https://stackoverflow.com/questions/39825428/mysql-error-program-wont-compile-because-of-error/39826687 https://tecadmin.net/docker-compose-persistent-mysql-data/