Ausführen von zwei Java PreparedStatements mit einer Verbindungsstilauswahl

8

Okay, ich habe festgestellt, dass ich wirklich viel zu viele Fragen gestellt habe, ohne etwas zur Gemeinschaft beizutragen, aber ich möchte Ihre Meinung dazu hören. Sag, wenn ich

habe %Vor%

und ich wollte mehrere Operationen auf meiner MySQL-Datenbank mit einer einzigen Verbindung durchführen. Ist es besser,

zu schreiben? %Vor%

oder

%Vor%

Ich halte es für besser, entweder sicherer, klarer, prägnanter oder robuster zu sein. Ich bin mir nicht sicher, ob das letztere immer schließt, welche vorbereiteten Aussagen und Ergebnissätze immer dann geöffnet sind, wenn es auf eine Ausnahme stößt, während ich glaube, dass es prägnanter aussieht. Aber ersteres sieht schöner aus, da es konsistenter ist, aber es bringt mehr Overhead, da es mehr try-finally-Blöcke verwendet.

Mir ist klar, dass der automatische Ressourcenmanagement-Teil von Project Coin von Java 7 mich zwingen wird, mich an ersteres zu orientieren, da die im Header verwendeten Ressourcen implizit endgültig im Körper sind. Ich habe jedoch einige Zeit, bevor ich mich darum kümmern muss, meinen Code zu überarbeiten, um ihn an ARM anzupassen und den Boilerplate-Code entfernen zu können, so dass die Frage immer noch steht: Von den beiden oben genannten Stilen, was wäre besser? Wenn beide das erwartete Verhalten zeigen, wird mir letzteres einen spürbaren Leistungsschub geben, der den "hässlicheren" Stil entschuldigen würde?

    
Kevin Jin 26.06.2011, 20:53
quelle

4 Antworten

6

Es scheint mir, dass dies eine persönliche Vorliebe ist. In meiner Zeit habe ich Code geschrieben, der beiden Blöcken ähnelt. Was die Leistung anbelangt, glaube ich nicht, dass es einen besonders auffälligen Unterschied geben würde, würden nur Leistungstests zeigen.

Es könnte ein Fall sein, dass der Unterschied von etwa einer Millisekunde, den eine Version liefert, nicht halb so wichtig ist wie die zehn Minuten oder so, dass eine andere Person, die Ihren Code sechs Monate nach dem Schreiben liest, fragen würde warum / p>

Meine persönliche Vorliebe wäre die zweite. Sie sagen, Sie halten eine Verbindung offen für die Datenbank. Mit dem ersten Codeblock, wenn Sie eine Exception ausgelöst bekommen, würde das gehandhabt, aber dann würden Sie zum zweiten try / catch gehen und es erneut versuchen. Sie könnten das nicht wollen, wenn der erste fehlgeschlagen ist. Bei der zweiten würde eine Ausnahme dazu führen, dass Sie den Code verlassen und Ihre Verbindung schließen.

Ich habe hauptsächlich in C # programmiert. Es war vor ungefähr acht Jahren, als ich das letzte Mal Java gemacht habe. Aber ich denke, es gibt und gab viele C # -Programmierer, die darüber nachgedacht haben. Ich habe es jedenfalls.

    
Daniel Hollinrake 26.06.2011, 21:24
quelle
4

Wenn Sie es betrachten, werden Sie sehen, dass die Logik etwas anders ist - die erste Version wird die zweite Abfrage ausführen, selbst wenn die erste Abfragebehandlung fehlschlägt. Die zweite Version wird nur mit der Ausführung der zweiten Abfrage fortfahren, wenn die Verarbeitung der ersten Abfrage + Ergebnisse erfolgreich ist.

    
mvmn 26.06.2011 22:18
quelle
1

Der zweite ist der Weg zu gehen. Die erste kann die Verbindung möglicherweise nicht schließen, wenn im ersten try-Block eine Ausnahme auftritt. Wenn Sie nur im catch-Block zu stderr drucken, dann nicht, aber Sie werden das nicht tun. Oder sollte die 2. Aussage ohne Rücksicht auf Erfolg / Misserfolg der ersten ausgeführt werden?

    
Fabian Barney 26.06.2011 21:36
quelle
0

Ich weiß, dass dieser Beitrag alt ist, aber wenn Sie das Glück haben, in einer Java7-Umgebung zu laufen, würde ich vorschlagen, try-with-resource .

Die Verbindung wird für Sie geschlossen, da die neuen Versionen der Klasse das Closable Schnittstelle.

%Vor%     
avanderw 19.07.2013 08:33
quelle

Tags und Links