[C] MySQL sprawdzenie połączenia

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
marcin0x02
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 lis 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

[C] MySQL sprawdzenie połączenia

Post autor: marcin0x02 »

Witam,

Pisze program w C, który zamieszcza w bazie MySQL odpowiednie dane. Potrzebuje sprawdzić czy połączenie z baza danych jest aktywne, chciałem użyć do tego funkcji

Kod: Zaznacz cały

int mysql_ping(MYSQL *mysql)
Nie rozumiem dlaczego jak w trakcie działania programu wypnę kabel sieciowy, to funkcja zwróci wartość 0 (co oznacza że połączenie jest aktywne). Wie ktoś jak sprawdzić czy połączenie jest aktywne?
Ostatnio zmieniony 06 maja 2012, 18:25 przez marcin0x02, łącznie zmieniany 2 razy.
Awatar użytkownika
liftboy syndrome
Wytworny Kaczor
Wytworny Kaczor
Posty: 336
Rejestracja: 05 maja 2012, 21:48
Płeć: Mężczyzna

Re: [C] MySQL sprawdzenie pałącznia

Post autor: liftboy syndrome »

Czy połączenie z bazą danych jest właśnie przez ten kabel, który wypinasz?
marcin0x02
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 lis 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C] MySQL sprawdzenie pałącznia

Post autor: marcin0x02 »

Tak. Właśnie zależy mi ta tym by wykryć takiego typu zdarzenia, np. w wyniku uszkodzenia przewodu, czy go wypięcia.
Awatar użytkownika
liftboy syndrome
Wytworny Kaczor
Wytworny Kaczor
Posty: 336
Rejestracja: 05 maja 2012, 21:48
Płeć: Mężczyzna

Re: [C] MySQL sprawdzenie pałącznia

Post autor: liftboy syndrome »

Hmmm... w takim razie mysql_ping absolutnie nie powinien zwrócić wartości 0. Mógłbyś wrzucić tu kawałek kodu programu, jak to sprawdzasz?

Innym sposobem prostego sprawdzenia połączenia jest wykonanie query "select 1" które powinno zwrócić "1", jeżeli z serwerem wszystko OK, a błąd w przeciwnym wypadku. Jeżeli po rozłączeniu również mysql_query zwróci Ci 0, to znaczy że to chyba nie jest ten kabel ;)
marcin0x02
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 lis 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C] MySQL sprawdzenie pałącznia

Post autor: marcin0x02 »

Kod: Zaznacz cały

if(mysql_ping(conn)) *statusMySQL = 0;
	else *statusMySQL = 1;
Użycie zapytani "select 1" wydaje się dawać poprawne rezultaty :).

Kod: Zaznacz cały

if(mysql_query(conn, "SELECT 1")) *statusMySQL = 1;	
	else *statusMySQL = 0;
Do mysql_ping() trzeba chyba timeout ustawić?
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C] MySQL sprawdzenie pałącznia

Post autor: ethanak »

a ja tak z ciekawości: dlaczego nie spróbujesz po prostu query, i dopiero jak nie wyjdzie zastanowić się dlaczego?
poza tym popraw tytuł wątku bo wynalazłeś Całkowicie Nowe Słowo (TM)
Awatar użytkownika
liftboy syndrome
Wytworny Kaczor
Wytworny Kaczor
Posty: 336
Rejestracja: 05 maja 2012, 21:48
Płeć: Mężczyzna

Re: [C] MySQL sprawdzenie pałącznia

Post autor: liftboy syndrome »

marcin0x02, ale dlaczego zamieniłeś wartości w statusach?
Po poprawnym wykonaniu mysql_ping powinno zwracać 0, czyli ustawiać statusMySQL na 1
Po poprawnym wykonaniu mysql_query również zwraca wartość 0, ale wtedy w Twoim kodzie ustawi statusMySQL na 0
Pokręciłeś coś.

ethanak, nie wiesz co to są pałącznie?
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C] MySQL sprawdzenie pałącznia

Post autor: ethanak »

pałącznie to rodzaj patałęczy wygibłych.
marcin0x02
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 lis 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C] MySQL sprawdzenie połącznia

Post autor: marcin0x02 »

Faktycznie pomieszałem z statusMySQL.
mysql_query nie ustawia statusMySQL na 0 przy odpiętym kablu.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C] MySQL sprawdzenie połącznia

Post autor: ethanak »

niestety:
niedostateczny z programowania współbieżnego
niedostateczny z przygotowania do tematu (ze szczególnym uwzględnieniem niechęci do poczytania sobie dokumentacji do libmysqlclient)
odpowiedź prawidłowa jest 3, ponieważ to trzy, samołóż wywiorstne, gręzacz tęci wzdyżmy.
Awatar użytkownika
liftboy syndrome
Wytworny Kaczor
Wytworny Kaczor
Posty: 336
Rejestracja: 05 maja 2012, 21:48
Płeć: Mężczyzna

Re: [C] MySQL sprawdzenie połącznia

Post autor: liftboy syndrome »

marcin0x02 pisze:mysql_query nie ustawia statusMySQL na 0 przy odpiętym kablu.
A można wiedzieć jak nawiązujesz połączenie z bazą?
marcin0x02
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 lis 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C] MySQL sprawdzenie połącznia

Post autor: marcin0x02 »

Za pomocą mysql_real_connect
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C] MySQL sprawdzenie połącznia

Post autor: ethanak »

popraw, qr2, ten temat bo w oczy kłuje... tylko porządnie.
Awatar użytkownika
liftboy syndrome
Wytworny Kaczor
Wytworny Kaczor
Posty: 336
Rejestracja: 05 maja 2012, 21:48
Płeć: Mężczyzna

Re: [C] MySQL sprawdzenie połączenia

Post autor: liftboy syndrome »

Mógłbyś wkleić kod (oczywiście zmień usera i hasło)
marcin0x02
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 lis 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C] MySQL sprawdzenie połączenia

Post autor: marcin0x02 »

Kod: Zaznacz cały

if (mysql_real_connect(conn, pConf->cServer, pConf->cUser, pConf->cPass, pConf->cBase, 0, NULL, 0) == NULL) {
		printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
}
Awatar użytkownika
liftboy syndrome
Wytworny Kaczor
Wytworny Kaczor
Posty: 336
Rejestracja: 05 maja 2012, 21:48
Płeć: Mężczyzna

Re: [C] MySQL sprawdzenie połączenia

Post autor: liftboy syndrome »

Ok ;)
Chodzi mi o to co siedzi w pConf->cServer
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C] MySQL sprawdzenie połączenia

Post autor: ethanak »

czyli co, połączenie nie wyszło więc printujesz informację i dalej radośnie korzystasz z nieistniejącego połączenia?
następny niedostateczny ze znajomości C.
chłopie, weź se poczytaj o podstawach, a potem zawracaj d... całemu światu.
marcin0x02
Piegowaty Guziec
Piegowaty Guziec
Posty: 19
Rejestracja: 22 lis 2008, 15:51
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C] MySQL sprawdzenie połączenia

Post autor: marcin0x02 »

Adres serwera: mysql.agh.edu.pl
ethanak: jeśli połączenie nie wyszło to che ustawić odpowiednią flage.
Awatar użytkownika
liftboy syndrome
Wytworny Kaczor
Wytworny Kaczor
Posty: 336
Rejestracja: 05 maja 2012, 21:48
Płeć: Mężczyzna

Re: [C] MySQL sprawdzenie połączenia

Post autor: liftboy syndrome »

Ok.
Może zatem podejdę od innej strony: **nie ma takiej możliwości**, żeby poprawnie wykonało się query na bazie danych, jeżeli fizycznie likwidujesz z nią połączenie. Tak więc kod

Kod: Zaznacz cały

if (mysql_query(conn, "select 1") == 0) {
    // jest ok
} else {
   // jest zima
}
MUSI działać. Z mysql_ping tak samo.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C] MySQL sprawdzenie połączenia

Post autor: ethanak »

a po co ta flaga? reconnect, druga próba a jak nie wyjdzie to exit(1).
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Google [Bot] i 10 gości