Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Łączenie się z bazą danych MySQL z poziomu C++

Do tej pory aplikacje, które omawiałem przy okazji artykułów z C++ zapisywały swoje dane w pamięci RAM lub za pomocą zwykłych plików. W pierwszym przypadku oczywiście wszystko co „zapisaliśmy” w zmiennych bądź stałych po wyłączeniu programu po prostu traciliśmy. Korzystając z plików ten problem mogliśmy już ominąć.

Niestety nasz system rezerwacji miejsc w kinie, który został stworzony w ostatnich artykułach jest jednak zbyt wymagający do tego, żeby zapisywać wygenerowane za jego pośrednictwem dane w zwykłych plikach. Tutaj potrzebujemy czegoś znacznie lepszego i dodatkowo umożliwiającego dostęp do danych z kilku urządzeń. Dobrym pomysłem będzie więc skorzystanie z serwera bazodanowego wyposażonego na przykład w bazę MySQL. Przyjrzyjmy się więc, jak połączyć się z taką bazą.

Na początku musimy dołączyć odpowiednie pliki nagłówkowe, zarówno na Windowsie jak i OS X oraz Linuxie będzie to plik mysql.h (konfiguracja Xcode):

#include <mysql.h>

Po zaimportowaniu odpowiedniego pliku przechodzimy do stworzenia obiektu (zmiennej) typu MYSQL oraz jej inicjalizacji:

MYSQL mysql; // tworzymy zmienną typu MYSQL

mysql_init(&mysql); // inicjalizacja

Kolejnym krokiem będzie nawiązanie połączenia z naszym serwerem bazodanowym. Jeśli nie dysponujecie takim możecie na potrzeby edukacyjne uruchomić go lokalnie, jak zresztą sam zrobiłem.

Z bazą MySQL łączymy się za pomocą funkcji mysql_real_connect(). Pamiętajcie żeby przygotować takie informacje jak adres serwera (w przypadku postawienia bazy na własnym komputerze czyli lokalnie jest to domyślnie – 127.0.0.1), nazwy użytkownika, hasła oraz nazwy utworzonej bazy danych (np. mysql – jest to baza tworzona domyślnie i zawiera informacje o waszej instalacji MySQL):

mysql_real_connect(&mysql, "127.0.0.1", "root", "", "mysql", 0, NULL, 0);

Ogólna składnia:

mysql_real_connect(&mysql, "adresSerwera", "nazwaUrzytkownika", "haslo", "nazwaBazyDanych", port, unixSocket, flagiKlienta);

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);

Połączenie z bazą danych zamykamy za pomocą instrukcji mysql_close():

mysql_close(&mysql);

Przykładowy program, łączący się z bazą danych:

#include <iostream>
#include <mysql.h>

int main(int argc, const char * argv[])
{
    MYSQL mysql;

    mysql_init(&mysql); // incjalizacja
    
    if(mysql_real_connect(&mysql, "127.0.0.1", "root", "", "mysql", 0, NULL, 0))
        printf("Połączenie z bazą danych MySQL nawiązano poprawnie!\n");
    else
        printf("Błąd połączenia z bazą MySQL: %d, %s\n", mysql_errno(&mysql), mysql_error(&mysql));
    
    mysql_close(&mysql); // zamknij połączenie
    
    return 0;
}

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , ,

Dodaj komentarz

Komentarze (5)

  • Johny Bravo pisze:

    A jak by wyglądał kod wyciągający jakieś dane z bazy danych i umieszczający je w zmiennych, jest mi to dość potrzebne, prosiłbym o dokładny przykład, bo to jest tak skomplikowana operacja (przynajmniej dla mnie, dopiero teraz pozbyłem się błędów i skompilowałem aplikację), że powstaje błąd na błędzie. Z góry dzięki, pozdrawiam.

  • szevaa pisze:

    Witam!

    Niestety nie mam biblioteki mysql używam VS2012 co powinienem zrobić ?

  • Bartosz pisze:

    $ gcc -I/usr/include/mysql polaczenie_mysql_example.cpp
    /usr/bin/ld: /tmp/ccKoSuYx.o: in function `main’:
    polaczenie_mysql_example.cpp:(.text+0x33): undefined reference to `mysql_init’
    /usr/bin/ld: polaczenie_mysql_example.cpp:(.text+0x68): undefined reference to `mysql_real_connect’
    /usr/bin/ld: polaczenie_mysql_example.cpp:(.text+0x93): undefined reference to `mysql_error’
    /usr/bin/ld: polaczenie_mysql_example.cpp:(.text+0xa5): undefined reference to `mysql_errno’
    /usr/bin/ld: polaczenie_mysql_example.cpp:(.text+0xca): undefined reference to `mysql_close’
    /usr/bin/ld: /tmp/ccKoSuYx.o: in function `__static_initialization_and_destruction_0(int, int)’:
    polaczenie_mysql_example.cpp:(.text+0x112): undefined reference to `std::ios_base::Init::Init()’
    /usr/bin/ld: polaczenie_mysql_example.cpp:(.text+0x127): undefined reference to `std::ios_base::Init::~Init()’
    collect2: error: ld returned 1 exit status
    $

    Coś nie bardzo działa ten przykład.

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest