[MYSQL] Kolejne pytanie

Pytania i problemy
jbrudek
jbrudek

Witajcie to znowu ja, tym razem mam problem z błędem MySQL, nie wiem co spowodowało ten błąd, ale kiedy jestem sam na serwerze wszystko działa bardzo dobrze, a gdy wejdzie ktoś więcej to nagle wywala takie błędy:

błędy

Pastebin bo za długie błędy

riko.dev
riko.dev Moderator Freebies

Wystarczy zapoznać się z informacją w konsoli.

Could not create connection to database server. Attempted reconnect 3 times. Giving up.

Plugin nie może połączyć się z serwerem. Sprawdź, czy wpisane w konfiguracji dane są poprawne. Możliwe, że ten serwer MySQL pozwala tylko na połączenia z wewnątrz.

jbrudek
jbrudek

Dzięki za szybką odpowiedź, ale mysql działa, problem robi się przy połączeniu się kolejnego gracza

psycho
psycho

A nie tworzysz nowego połączenia przy jego połączeniu?

jbrudek
jbrudek

tworzę ale je zamykam, czy to źle?, bo jeśli jestem sam na serwerze jest OK, gdy jest 2 już nie.

psycho
psycho

Moim zdaniem wszystko powinno się opierać o jedno połączenie/pool, który wykonywałby kolejne kwerendy i był zamykany przy zamknięciu pluginu / utracie połączenia z bazą danych.

jbrudek
jbrudek

hm, przeczytałem że wyjątek com.mysql.jdbc.exceptions.jdbc4.CommunicationsException powstaje po pewnym czasie bezczynności. Ciekawe co mówisz bo jedni mówią że połączenia powinno się zamykać i tworzyć nowe, a niektórzy żeby korzystać z jednego

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Powinno się dać zająć połączeniami bibliotece (np hikaricp), a nie wymyślać. Jedno połączenie to chyba prawie zawsze zła opcja w aplikacji, która ciągle pracuje.

jbrudek
jbrudek

Wracając do tematu; jakieś pomysły?

EDIT: Skłaniam się ku temu, że połączenie jest przerywane, spróbuje wykonywać zapytanie SELECT NOW() co minutę, zapobiegnie to bezczynności. Jeśli macie jakieś pomysły, podrzućcie coś :slight_smile:

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Nie wiemy nic o twojej aplikacji, jak jest zaimplementowane połączenie z bazą. Po samym błędzie nic nie można powiedzieć więcej, niż polecić używanie biblioteki z automatycznym zarządzaniem połączeniami.

jbrudek
jbrudek

Chodzi o to?

Connection connection = (Connection) DriverManager.getConnection(JdbcURL, username, password);
Statement st = connection.createStatement();

result = st.executeQuery(query);
Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

W tym kodzie nigdzie nie ma zamykania połączenia widocznego, a klasa DriverManager wydaje się być stworzoną przez ciebie. Nadal nic nie da się tutaj powiedzieć.

jbrudek
jbrudek

Klasa DriverManager pochodzi z package java.sql

Cała metoda

Connection connection = (Connection) DriverManager.getConnection(JdbcURL, username, password);
Statement st = connection.createStatement();

result = st.executeQuery(cos);

String isBan = null;
Long date = null;

if(result.next())
{
    isBan = result.getString("NICK");
    date = result.getLong("ENDTIME");
}

connection.close();
Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Powinieneś używać do obsługi Closeable try-catch-finally lub najlepiej try-with-resources. Jest jakiś konkretny powód, dla którego nie używasz biblioteki do obsługi bazy danych?

jbrudek
jbrudek

Nie ma, polecisz jakiś poradnik do bibliotek?

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro
system
system

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.