Programowanie w C – RPi – Bazy Danych – Nawiązanie połączenia

Wprowadzenie.

Pierwszym właściwym krokiem pracy z bazą danych w języku C jest nawiązanie połączenia z bazą danych. We wpisie przedstawiłem prosty program, który przeprowadzi nas przez tą procedurę. 

Zakres wpisu:

  • Program w C
  • Plik Makefile
  • Testy

Program w C

Kod programu, który pozwoli na przetestowanie działania funkcji z biblioteki mysql.h zapisałem w pliku main.c i wygląda następująco.
#include <stdio.h>
#include <mysql/mysql.h>

int main(int argc, char **argv)
{
	MYSQL *dbConn;
	
	char *dbServer = "localhost";
	char *dbUser = "uzytkownik";	
	char *dbPassword = "haslo";
	char *dbName = "nazwaBazyDanych";
	
	dbConn = mysql_init(NULL);
	
	/* Nazwiązanie połączenia z bazą danych */
	if (!mysql_real_connect(dbConn, dbServer, dbUser, dbPassword, dbName, 0, NULL, 0)) 
	{
		fprintf(stderr, "%s\n", mysql_error(dbConn));
		return 1;
	}
	fprintf(stdout, "Polaczenie z baza danych przebieglo pomyslnie\n");
	
	mysql_close(dbConn);

	return 0;
}

MYSQL *mysql_init(MYSQL *mysql) – funkcja ta ma za zadanie zaalokować lub zainicjalizować strukturę MYSQL do nawiązania połączenia z bazą danych. W przypadku kiedy argument funkcji przyjmuje wartość NULL wówczas tworzona jest nowa struktura, natomiast gdy podana jest inna wartość argumentu (struktura MYSQL), wówczas zostanie zwrócony adres tej struktury. Dla każdej utworzonej struktury, należy pamiętać o zwolnieniu pamięci przy pomocy funkcji mysql_close(), która jednocześnie zamyka połączenie.
W przypadku gdy zasoby sprzętowe nie będą posiadać wolnej pamięci do zaalokowania struktury, wówczas funkcja mysql_init() zwróci wartość NULL.

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag) – funkcja ta ma za zadanie nawiązanie połączenia z bazą danych MySQL. Funkcja zwraca wartość NULL w przypadku nieudanego połączenia, natomiast w przypadku udanego połączenia zwracana wartość jest taka sama jak wprowadzony pierwszy parametr.
– pierwszym argumentem (*mysql) funkcji stanowi adres struktury MYSQL;
– drugim argumentem (*host) funkcji jest nazwa hosta lub adres IP. W przypadku gdy argument przyjmuje wartość NULL lub string”localhost” wówczas funkcja zakłada, że połączenie ma nastąpić z local hostem; 
– trzecim argumentem (*user) funkcji jest login użytkownika bazy danych MySQL;
– czwartym argumentem (*passwd) funkcji jest hasło użytkownika bazy danych MySQL;
– piątym argumentem (*db) funkcji jest nazwa bazy danych;
– szóstym parametrem (port) funkcji jest numer portu połączenia TCP/IP;
– siódmym parametrem (*unix_socket) funkcji jest ciąg znakowy string określający gniazdo lub nazwę potoku do użycia;
– ósmy parametr (client_flag) funkcji przyjmuje zazwyczaj wartość 0, lecz może być ustawiony jako kombinacja flag do włączenia pewnych funkcji.  

const char *mysql_error(MYSQL *mysql) – funkcja ta zwraca zmienną string zakończoną znakiem NULL. String zawiera informację o błędzie, który wystąpił. W przypadku wywołania funkcji, gdy nie wystąpił błąd wartość zwracana funkcji może przyjąć wartość ostatniego błędu lub też zmienna string może być pusta. 

void mysql_close(MYSQL *mysql) – funkcja ta jest odpowiedzialna za zakończenie połączenia z bazą danych. Funkcja również zwalnia uchwyt wskaźnika do struktury MYSQL, dlatego po wywołaniu funkcji mysql_close() nie należy używać uchwytu wskaźnika struktury MYSQL. Funkcja ta nie zwraca żadnej wartości.

Dokładniejszy opis powyższych funkcji znajduje się pod tym linkiem: https://dev.mysql.com/doc/refman/8.0/en/c-api-functions.html

Plik Makefile

Konstrukcję pliku Makefile przedstawiłem we wpisie Programowanie w C – RPi – Bazy Danych – Pierwszy program

Testy

Gdy mamy przygotowany program w C (main.c) oraz plik Makefile może przejść do kompilacji oraz uruchomienia naszego programu.

W konsoli wpisujemy polecenie:

$ make

Następnie uruchamiamy nasz program poleceniem:

$ ./test

Wynik jaki otrzymamy powinien wyglądać następująco:

Polaczenie z baza danych przebieglo pomyslnie

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.