Kitek's Page Blog programisty / webdeveloper'a

MySQL API w języku C – część 1

Programowanie w C z wykorzystaniem MySQL API

W kilku odcinkach chciałbym zaprezentować możliwość użycia bazy danych MySQL w języku C na platformie Linux.

Co będzie nam do tego potrzebne:

  • podstawowa znajomość języka C
  • zainstalowana lokalnie baza danych MySQL

Szkielet programu

Poniżej przestawiam model wyjściowy dla naszych przykładowych programów:

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

int main() {
    MYSQL mysql;

    return 1;
}

Do standardowej biblioteki stdio.h dołączamy również mysql.h stanowiącą podstawę obsługi MySQL w C. Jest ona dostarczana wraz z serwerem MySQL.

Kompilowanie i uruchamianie

Wszystkie napisane przez nas programy wykorzystujące bibliotekę mysql.h muszą być kompilowane w specjalny sposób:

gcc my.c -o my -I/usr/local/include -L/usr/local/lib/mysql -lmysqlclient
  • gcc – kompilator (tak naprawdę jest to zestaw kilku kompilatorów – więcej..)
  • my.c – program w C
  • o my – nazwa pliku wynikowego (jest to parametr opcjonalny, jeżeli go nie podamy kompilator zapisze nasz program pod nazwą domyślną np. a.out)
  • I/usr/local/include – wskazuje jaki katalog ma zostać uwzględniony w poszukiwaniu plików nagłówkowych
  • L/usr/local/lib/mysql -lmysqlclient – wskazuje jakie katalogi/pliki mają zostać podlinkowane podczas kompilacji programu

Inicjalizacja MySQL API

W tym momencie wiemy już jaki wstępny model będą miały nasze programy, a także jak je kompilować – przystąpmy więc do napisania pierwszego prostego programu sprawdzającego czy w naszym środowisku możemy wykorzystywać API MySQL.

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

int main() {
    MYSQL mysql;

    if(mysql_init(&mysql)==NULL) {
        printf("\nBlad inicjalizacji\n");
    } else {
        printf("\nWyglada ze jest ok ;)\n");
    }

    mysql_close(&mysql);
    return 1;
}

W powyższym programie inicjalizujemy MySQL API – zmienne globalne, obsługę wątków itp. Warto wspomnieć w tym miejscu, że po ostatnim nawiasie klamrowym musimy przejść dodatkowo do następnej linii w przeciwnym razie otrzymamy ostrzeżenie od kompilatora: warning: no newline at end of file.

Tworzenie połączenia z bazą MySQL

W naszym drugim przykładzie wykorzystamy trzy nowe funkcje:

  • mysql_real_connect – nawiązuje połączenie z bazą
  • mysql_get_client_info – pobiera wersję zainstalowanego klienta
  • mysql_get_server_info – pobiera wersję serwera
#include <stdio.h>
#include "mysql/mysql.h"

int main() {
    MYSQL mysql;

    if(mysql_init(&mysql)==NULL) {
        printf("\nBlad inicjalizacji\n");
        return 0;
    }

    mysql_real_connect(&mysql,"localhost","user","pass","dbname",0,NULL,0);

    printf("Wersja klienta: %s",mysql_get_client_info());
    printf("\nWersja serwera: %s",mysql_get_server_info(&mysql));
    mysql_close(&mysql);
    return 1;
}

W ten sposób udało nam się połączyć i zalogować z bazą danych. Do tego celu wykorzystaliśmy serwer działający na localhost-cie, użytkownika o loginie user, hasła pass i bazę danych o nazwie dbname.

Linki: