Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

 

Φτιάχνω μια εφαρμογή σε Java που διαχειρίζεται μια βάση mySQL και αναρωτίεμαι αν και σε τί να κάνω close μετά το τελος των query.

Για παράδειγμα μια απλη μορφή αυτού που έχω ειναι η εξής:

 

>
Connection conn = InitializeConnection();			
PreparedStatement statement = conn.prepareStatement(query);		
ResultSet result = statement.executeQuery();
	
while(result.next())
{
//get data
}		
	
statement.close();
result.close();
conn.close();

 

Ποιό από αυτά τα close είναι απαραίτητο; Αν έχει σημασία αμέσως μετα τα close γινεται return της μεθόδου.

Δημοσ.

Στην ουσία αυτό που χρειάζεται να κλείσεις μόνο είναι το Connection. Όταν κλείσει αυτό, κλείνει και το Statement και το ResultSet. Απλά σε περίπτωση που τα έχεις κλείσει και χρειάζεται να τα χρησιμοποιήσεις πάλι, θα σου πετάξει SQLException. Εφόσον όμως κάνεις return στη μέθοδο μετά το close, τότε δεν θα έχεις πρόβλημα (ίσα ίσα που θα βοηθήσεις και το garbage collection).

Δημοσ.

Έχοντας κάποια σχετική εμπειρία με .NET και MySql θα πρότεινα να κάνεις close και στα 3 objects.

 

Όταν καλείς την close για ένα connection δεν γίνεται close εκείνη τη στιγμή αλλά ενημερώνεται ο driver ότι αυτό το connection δεν το χρειάζεται η εφαρμογή. Ο driver θα αποφασίσει πότε θα κλείσει το connection και να κάνει release τα όποια resources. Μπορεί λοιπόν κάποιο από τα άλλα δύο objects να "κρατήσουν" ανοιχτό το connection και αυτό να κλείσει όταν ο garbage collector τελικά τα κάνει dispose. Καλώντας την close και για τα τρία objects αποφεύγεις αυτό το σενάριο.

 

Δεν ξέρω κατά πόσο στη Java είναι πιθανό αυτό το σενάριο, αλλά επειδή εμπλέκεται κ ο driver της MySQL (φαντάζομαι Connector/J) μου φαίνεται πιθανό.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...