Programowanie w C – RPi – Bazy Danych – Wynik zapytania

Kilka słów na początek.

W poprzednim wpisie przedstawiłem w jaki sposób kierować zapytania do bazy danych MySQL. W celu odczytania danych po zapytaniu, należy wykorzystać dodatkowe funkcje, które umożliwią nam swobodne odczytanie danych.

Zakres artykułu.

  • Program w C
  • Plik Makefile
  • Testy

Program w C

Kod programu, który pozwoli na przetestowanie odpowiedzi zapytania do bazy danych MySQL 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)
{
	int i = 0;
	int j = 0;
	
	MYSQL *dbConn;
	
	char *dbServer = "localhost";
	char *dbUser = "nazwaUzytkownika";	
	char *dbPassword = "hasloUzytkownika";
	char *dbName = "testowaBazaDanych";
	
	unsigned int liczbaKolumn = 0;
	my_ulonglong liczbaWierszy = 0;
	
	MYSQL_RES *res;
	MYSQL_ROW row;
	
	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");
	
	if (mysql_query(dbConn, "SELECT * FROM testowaTabela")) 
	{
		fprintf(stderr, "%s\n", mysql_error(dbConn));
		return 1;
	}
	
	res = mysql_store_result(dbConn);
	
	liczbaKolumn = mysql_field_count(dbConn);
	fprintf(stdout, "Liczba kolumn: %d\n", liczbaKolumn);
		
	liczbaWierszy = mysql_num_rows(res);
	fprintf(stdout, "Liczba wierszy: %d\n", liczbaWierszy);
	
	for(i=0; i<liczbaWierszy; i++)
	{
		row = mysql_fetch_row(res);
		for(j=0; j<liczbaKolumn; j++)
		{
			printf("%s \t", row[j]);
		}
		printf("\n");
	}

	/* Zamykanie połączenia */
	mysql_free_result(res);
	mysql_close(dbConn);

	return 0;
}

MYSQL_RES *mysql_store_result(MYSQL *mysql) – funkcja ta alokuje strukturę MYSQL_RES a następnie zwraca do niej cały wynik zapytania. W przypadku kiedy zostanie zwrócona wartość NULL oznacza to, że zapytanie nie zwróciło żadnego wyniku (sytuacja ta ma miejsce przy zapytaniu wstawiania lub tworzenia bazy danych) lub wystąpił błąd. W celu zweryfikowania, czy zapytanie nic nie zwróciło, czy pojawił się błąd możemy zastosować funkcję mysql_field_count(), której opis zamieściłem poniżej. Funkcję mysql_store_result() stosujemy po zastosowaniu funkcji mysql_query(), bądź mysql_real_query(), które mogą zwrócić wynik. Po zakończeniu działania na zwróconych danych, należy zwolnić zarezerwowaną pamięć poprzez zastosowanie funkcji mysql_free_result().

unsigned int mysql_field_count(MYSQL *mysql) – funkcja ta zwraca liczbę kolumn ostatniego zapytania, które zostało skierowane do bazy danych.

my_ulonglong mysql_num_rows(MYSQL_RES *result) – funkcja ta zwraca liczbę wierszy zapytania, które zostało skierowane do bazy danych.

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) – funkcja ta zwraca strukturę MYSQL_ROW kolejnego wiersza lub wartość NULL. Znaczenie wartości NULL jest uzależnione od funkcji, która została uprzednio wywołana. W przypadku jeśli funkcja mysql_fetch_row() została wywołana po funkcjach takich jak mysql_store_result() lub mysql_store_result_nonblocking(), wówczas NULL oznacza, że nie ma więcej wierszy do odczytania. W przypadku jeśli funkcja mysql_fetch_row() została wywołana po funkcjach takich jak mysql_use_result(), mysql_fetch_row() wówczas NULL oznacza, że nie ma więcej wierszy do odczytania lub pojawił się błąd. 

void mysql_free_result(MYSQL_RES *result) – funkcja ta zwalnia zaalokowaną pamięć dla wyniku otrzymanego po wywołaniu między innymi funkcji takich jak mysql_store_result(), mysql_use_result(), mysql_list_dbs(). Funkcja ta nie zwraca żadnej wartości.

Dokładniejszy opis powyższuch funkcji znajdziemy na stronie:
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

Przed przystąpieniem do testowania, aby była możliwość sprawdzenia poprawności programu, dodałem do bazy danych kilka rekordów. 

Gdy już mamy przygotowany program w C (main.c), plik Makefile oraz dane w bazie danych możemy przejść do kompilacji oraz uruchomienia naszego programu. 

W konsoli wpisujemy polecenie: 

$ make

Następnie uruchamiamy program poleceniem: 

$ ./test

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

Polaczenie z baza danych przebieglo pomyslnie
Liczba kolumn: 6
Liczba wierszy: 3
1 Test nazwy 26 190.1 Test opisu mail@gmail.com
2 Test2 22 111.1 Opis test 2 emailTest2@gmail.com
3 Tescik3 1 1.44 Opis test 3 ddd@eee.dd

Otrzymane wyniki pokrywają się z tym co znajduje się w bazie danych.

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.