4 Stimmen

Prepared Statements und Connection Pooling zusammen in MySQL verwenden

Zurzeit wird für jede Abfrage eine vorbereitete Anweisung erstellt und wiederverwendet. Ich verwende keinen Verbindungspool. C3P0 ist eine weithin empfohlene Bibliothek für dasselbe.

Da ein PreparedStatement jedoch an eine Verbindung gebunden ist. In der gepoolten Umgebung werden die Verbindungen an den Pool zurückgegeben, was PreparedStatement effektiv unbrauchbar macht. Liege ich mit dieser Schlussfolgerung richtig? Gibt es eine Möglichkeit, Prepared Statement und Connection Pooling zusammen zu verwenden?

Update: Dies ist eine eigenständige Anwendung. Also, ich kann nicht einen Rahmen verwenden, nur um Connection Pooling richtig zu bekommen.

1voto

talonx Punkte 1765

Das hängt von dem von Ihnen verwendeten Pooling-Mechanismus ab. Die meisten Java EE-Applikationsserver verfügen über Verbindungspool-Implementierungen, bei denen für jede Verbindung im Pool ein Cache für vorbereitete Anweisungen vorhanden ist. Die vorbereiteten Anweisungen werden also wiederverwendet, ebenso wie die Verbindungen. Mir sind jedoch keine eigenständigen Pooling-Mechanismen bekannt, die diese Funktionalität bieten.

0voto

Alex Beardsley Punkte 20500

Ich glaube, wenn Sie die Verbindung schließen, geht das PreparedStatement "verloren", aber solange die gleiche Verbindung geöffnet bleibt, sollte das gleiche PreparedStatement verwendbar sein. Sie sollten sich Spring ansehen, um dies für Sie zu tun, indem Sie ein JdbcTemplate verwenden. Es abstrahiert all das, so dass Sie sich nicht darum kümmern müssen. Übergeben Sie ihm einfach eine DataSource und Sie sind startklar.

Hier sehen Sie, wie Sie c3p0 als DataSource-Objekt verwenden können: http://forum.springframework.org/showthread.php?t=13078

Sie können dann eine JdbcTemplate-Bean erstellen und die Datenquelle als Konstruktorargument übergeben, und dann das JdbcTemplate in die von Ihnen verwendeten DAO-Objekte injizieren.

0voto

duffymo Punkte 298898

Als ich sah dieses Material aus dem Buch "High Performance MySQL" ließ mich vermuten, dass Sie etwas an Ihrer MySQL-Konfiguration ändern mussten, das über das hinausging, was Sie in Java eingestellt hatten. Haben Sie Ihre my.cnf-Datei bearbeitet?

Haben Sie sich auch angesehen andere SO-Fragen zu diesem Thema?

EDIT: Spring ist ein Framework, das mit Pooling helfen kann, das perfekt für eigenständige Anwendungen geeignet ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X