MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout?

jeppi

Mitglied
Hallöle,

ich bin am Ende meines Lateins, und im Web finde ich einfach nichts vernünftiges zu dem Thema, selbst in ansonsten guten Tutorials schweigt sich anscheinend alle Welt zu diesem Thema aus:

Zuerst habe ich den mysql-connector verwendet, mittlerweile bin ich auf JdbcRowSet umgestiegen. Die Problematik bleibt aber immer die gleiche:

Meine Datenbank im Web scheint mich immer nach einer Weile nichtstun zu disconnecten (was von Seiten des Anbieters auch verständlich ist). Nur weiss ich nicht, wie ich von Java-Seite damit umgehen soll, wenn mir der Server die verbindung unter dem Hintern wegzieht. Mit einer lokalen Datenbank (localhost oder zweiter linux-pc) hatte ich die probleme nicht.

Um beim Beispiel JdbcRowSet zu bleiben, hier meine prinzipielle Vorgehensweise:

Java:
JdbcRowSet jdbcRs = new JdbcRowSetImpl();
jdbcRs.setUsername(user);
jdbcRs.setPassword(pw);
jdbcRs.setUrl(url);

String sql = "SELECT name, wert FROM table";
jdbcRs.setCommand(sql);
jdbcRs.execute();
jdbcRs.next();
[...]

// mit dem Ergebnis wird jetzt gearbeitet
//
// jetzt vergeht mitunter viel zeit (mitunter viele Minuten), 
// weil ein Kunde kommt oder so

[...]
jdbcRs.updateString("wert", "neue änderung");
jdbcRs.update(Row);

Wie gehe ich mit diesem Problem um? das dürfte ja wohl ein idle-Timeout sein, da es nach längerer Untätigkeit auftritt. Die Fehlermessage ist im wesentlichen:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 571.297 milliseconds ago. The last packet sent successfully to the server was 16 milliseconds ago.
[...]
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.


Ich denke, ich habe es hier mit einem prinzipiellen Design-Fehler meinerseits zu tun. Wenn nun jemand einen guten Rat hat oder ein Tutorial kennt, wie ich solche Timeouts vermeide bzw. trotz derer eine Datenbankanbindung stabil und zuverlässig hinbekomme, wäre ich sehr dankbar.

Ich habe mir schon mehrere Tage einen Wolf gegoogelt und bin wirklich am Ende... :rtfm: :confused:
 

tfa

Top Contributor
Ich würde da einen Connection-Pool verwenden, der kümmert sich um das Reconnect und ist DB-unabhängig. Allerdings hab ich keine Ahnung wie das mit JdbcRowSet funktioniert.
 

DerEisteeTrinker

Bekanntes Mitglied
Probiere im Connectionstring den UrlParameter "autoreconnect=true". Damit könnte das Problem gelöst sein. :)

Ist meiner Meinung nach nicht zu empfehlen. Man hat zwar eine Verbindung offen, aber die frisst Ressourcen und das muss ja beim Nichtstun nicht sein. Sprich da mach es lieber wie tfa es gesagt hat und verwende einen Verbindungspool. Dann nimmst dir bei jeder Anfrage eines Browser eine eigene Verbindung, die du nach gleich wieder zumachen kannst, wenn die Anfrage abgearbeitet ist und die Response auf die Reise geschickt wird.
 

jeppi

Mitglied
Probiere im Connectionstring den UrlParameter "autoreconnect=true". Damit könnte das Problem gelöst sein. :)

Beim jdbcRowSet funktioniert das so zumindest nicht, mir fliegt die Verbindung nachwievor um die Ohren. Aber immerhin weiß ich jetzt, dass es soeine Option gibt. Bin ich noch nirgendwo drüber gestolpert... insofern Danke, auch wenn's nicht hilft. ;)
 

jeppi

Mitglied
Ich würde da einen Connection-Pool verwenden, der kümmert sich um das Reconnect und ist DB-unabhängig. Allerdings hab ich keine Ahnung wie das mit JdbcRowSet funktioniert.

Hm... habe ich mich noch nie mit beschäftigt.
Setzt sowas auf den Connector auf?

... muss ich mich wohl mal schlau machen... interessanter Tipp - danke.
 

jeppi

Mitglied
Man hat zwar eine Verbindung offen, aber die frisst Ressourcen und das muss ja beim Nichtstun nicht sein.

Das wäre aber hier nicht das Problem. Da wären wenn's wirklich hoch kommt in Praxis drei PCs mit einer "stehenden" Verbindung zur DB. Nur funktioniert es mit dem jdbcrowset anscheinend nicht.

Wenn das jdbcRowSet die Verbindung übernimmt, hat man auch anscheinend auch keine echte Kontrolle mehr darüber. Also werde ich da doch lieber eine Connection übergeben, über die ich dann auch eine Gewisse Kontrolle ausüben kann.

Dann werde ich immer brav vor jedem Schritt die Verbindung herstellen, dann Schritt durchführen, dann Verbindung kappen... da bekommt das java dann was zu tun - und ich auch die nächsten Abende :applaus:
 

jeppi

Mitglied
Das setzt idR auf JDBC auf.

Yeah, that's it! danke! :)

Genau das dürfte mein Problem sein: Verschiedene Clients scheinen sich bei mir gegenseitig ins Gehege zu kommen....

Der dpunkt hat zum oracle-Treiber was geschrieben, aus dem das dahinterliegende Prinzip gut deutlich wird (naja, wenn man schon etwas tiefer in der Materie drinsteckt, jedenfalls):

Connection Pooling :rtfm:

edit: Wenn ich weitergekommen bin, dann melde ich mich hier wieder...
 

jeppi

Mitglied
Langsam versteh ich, wie der Hase rennt.

Meine größter Fehler war das Nutzen einer einzelnen Connection für verschiedene Resultsets in verschiedenen Paketen, bei denen sich die Nutzung der einen Connection gegenseitig überschnitten hat :oops:

Zuerst habe ich die Abfragen atomisiert und bei der Gelegenheit das exception-handling verbessert

1.) connect
2.) Abfrage mit JdbcRowSet
3.) close des RowSets
4.) close der Connection

Die Datenbankabfrage wurde dadurch zwar echt lahm, weil das Programm ständig Verbindungen zur DB öffnete und schloss, aber...

...dann habe ich DBCP integriert. Eine simple pooled connection kam nicht infrage, weil sich zwei Abfragen nachwievor überschneiden (voneinander abhängig).

Nun werkelt das Programm recht stabil mit zwei Connections vor sich hin, um die ich mich nicht kümmern muss. :toll:

Danke an tfa & DerEisteeTrinker !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Problem beim Datenbank-Design (relational) Datenbankprogrammierung 10
Kirby.exe DB Design Datenbankprogrammierung 0
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
I Datenbank Design: Internationalisierte Texte -> Bitte um Feedback Datenbankprogrammierung 3
M Grundlegende Klassen-Design Frage Datenbankprogrammierung 0
Spin Datenbank Design Datenbankprogrammierung 6
M design issue: datensatz lange locken? Datenbankprogrammierung 10
Antoras Design-Frage: Datenzuordnung zu verschiedenen Accounts Datenbankprogrammierung 2
J DB Verbindung Design Frage Datenbankprogrammierung 5
G gutes design für db-klasse Datenbankprogrammierung 3
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben