Pobieramy i wyświetlamy dane z bazy MySQL w C++

W poprzednim artykule, pokazałem jak należy połączyć się z serwerem bazodanowym bezpośrednio z poziomu kodu C++. Naszym celem jest jednak zaimplementowanie tego mechanizmu do zbudowanego wcześniej systemu rezerwacji biletów w kinie, aby to zrobić musimy jeszcze zapoznać się z tym jak pobrać i wyświetlić dane przechowywane w tabelach bazy MySQL.

Fot: exis, CC0 Public Domain.

Fot: exis, CC0 Public Domain.

Zaczniemy od rozbudowy ostatnio napisanego programu:

Przede wszystkim będziemy potrzebowali zmiennej typu MYSQL_RES do przechowywania wskaźnika identyfikującego zapytanie (id zapytania) oraz zmiennej typu MYSQL_ROW do przechowywania pobranego wiersza z bazy.

Zanim przejdziemy dalej, musimy jeszcze określić nazwę bazy danych z której chcemy skorzystać (w moim przypadku będzie to domyślna baza tworzona podczas instalacji MySQL):

Ogólna składnia:

Przyszła pora na gwóźdź programu czyli wykonanie odpowiedniej kwerendy SQL. Robimy to przy pomocy funkcji mysql_query():

Ogólna składnia:

Będziemy jeszcze potrzebowali idZapytania, pobierzemy go za pomocą funkcji mysql_store_result():

Mamy już wszystkie potrzebne dane, musimy to jeszcze jakoś wyświetlić. Konkretny wiersz możemy pobrać za pomocą funkcji mysql_fetch_row(), której jedynym argumentem jest właśnie uzyskane wcześniej idZapytania:

Aby dostać się do danych z konkretnej kolumny, zmienną wiersz traktujemy po prostu jak tablicę i w nawiasach kwadratowych podajemy numer kolumny (liczony od 0):

Liczbę wszystkich kolumn możemy uzyskać za pomocą funkcji mysql_num_fields(), której argumentem jest uzyskane wcześniej idZapytania:

Teraz możemy wszystko „ładnie” opakować w pętlę while i wyświetlić:

Cały program:

Przykładowy rezultat wykonania powyższego kodu:

Połączenie z bazą danych MySQL nawiązano poprawnie!
1 Geographic 0
2 Polygon properties 35
3 WKT 35
4 Numeric Functions 39
5 Plugins 36

, , , , , , , , , , ,

  • Johny Bravo

    A wiesz może jak zapisać wynik zapytania w zmiennej (np. nick w string, a wynik w int)?

    • Johny Bravo

      Spoko już umiem. Dla osób, którym też to nie wychodziło:
      string nick; nick = wiersz[i];
      Dzięki za pomoc, świetny poradnik, tylko chciałem zwrócić uwagę na to, że ten kod nie każdemu będzie działać, bo u ciebie jest MYSQL mysql; a mnie działa MYSQL *mysql; poza tym przy moim sposobie nigdzie nie można używać &mysql tylko mysql;