दिलचस्प पोस्ट
शब्दकोशों में आदेश और मनमाना क्यों सेट है? जावास्क्रिप्ट में ऑब्जेक्ट्स / एरेज़ का प्रदर्शन क्या है? (विशेष रूप से Google V8 के लिए) UI और GameObjects पर क्लिक / स्पर्श ईवेंट का पता लगाने के लिए पायथन त्रुटि: "मान त्रुटि: अनपैक करने के लिए 1 से अधिक मान की आवश्यकता है" स्थानीय शाखा, स्थानीय ट्रैकिंग शाखा, रिमोट ब्रांच और रिमोट ट्रैकिंग शाखा के बीच क्या अंतर है? जावा: प्राधिकरण के साथ अनुरोध पोस्ट करने के लिए यूआरएल कनेक्शन का उपयोग कैसे करें? गोदी कंटेनर को अपग्रेड कैसे करें, इसके बाद उसकी छवि बदल गई लिंक किए गए सर्वर MySQL कैसे बनाएँ व्यू मॉोडल्स के बीच पैरामीटर पास करना आधुनिक 1000000007 प्रश्नों में सहायता की आवश्यकता है एक गीतम भंडार के पहले दो कमानों को जोड़ता है? स्विफ्ट में वर्तमान समय में मिनट कैसे जोड़ें कब "a" टैग मूल टैग के रंग गुण का उत्तराधिकारी नहीं होगा? ढेर चर बनाम हीप वैरिएबल क्या कैमरा के साथ ऑब्जेक्ट की दूरी तय करना संभव है?

JDBC में कितनी बार कनेक्शन, वक्तव्य और परिणाम बंद होना चाहिए?

क्या प्रत्येक क्वेरी के बाद उन्हें बंद करने की आवश्यकता है और प्रत्येक क्वेरी की शुरुआत में आरम्भ किया गया है?

वेब के समाधान से एकत्रित समाधान "JDBC में कितनी बार कनेक्शन, वक्तव्य और परिणाम बंद होना चाहिए?"

हमेशा संसाधन लीक, ट्रांसेक्शनल समस्याएं और थका हुआ कनेक्शन पूल से बचने के लिए आपको कम से कम संभव क्षेत्र में उन्हें प्राप्त करना और बंद करना होगा। ऐसा नहीं करने से डीबी को जल्द ही या बाद में संसाधनों से बाहर निकलने का कारण होगा, जिसके परिणामस्वरूप "बहुत सारे कनेक्शन" जैसे अपवाद उत्पन्न होंगे

सामान्य जेडीबीसी मुहावरे निम्न हैं, जिससे सभी संसाधन खुले और बंद किए जाते हैं, साथ-साथ संसाधन-संसाधन ब्लॉक में भी:

public List<Entity> list() throws SQLException { List<Entity> entities = new ArrayList<Entity>(); try ( Connection connection = database.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_LIST); ResultSet resultSet = statement.executeQuery(); ) { while (resultSet.next()) { entities.add(map(resultSet)); } } return entities; } 

या जब आप अभी तक जावा 7 पर नहीं हैं:

 public List<Entity> list() throws SQLException { List<Entity> entities = new ArrayList<Entity>(); Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; try { connection = database.getConnection(); statement = connection.prepareStatement(SQL_LIST); resultSet = statement.executeQuery(); while (resultSet.next()) { entities.add(map(resultSet)); } } finally { if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {} if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} } return entities; } 

PreparedStatement का प्रयोग आपको बयान के डीबी कैशिंग का लाभ देगा (ठीक से उपयोग किए जाने पर एसक्यूएल इंजेक्शन की रोकथाम के आगे)। कनेक्शन प्राप्त करना और बंद करना सबसे महंगी कार्य है, लेकिन वहां कनेक्शन पूल का आविष्कार किया जाता है। यदि आप बल्क आवेषण / अपडेट करने के लिए एक ही कथन का पुन: उपयोग करना चाहते हैं, तो आप बैचों का उपयोग कर सकते हैं।

यह भी देखें:

  • जब मेरा ऐप कनेक्शन खो देता है, तो मुझे इसे कैसे ठीक करना चाहिए?
  • क्या यह एक स्थैतिक java.sql.Connection उदाहरण को एक multithreaded सिस्टम में उपयोग करने के लिए सुरक्षित है?

चूंकि आप किसी पिछली क्वेरी के परिणाम नहीं चाहते हैं, इसलिए आपको निश्चित रूप से ResultSet को इनिशियलाइज़ करना होगा।

वक्तव्य को फिर से रखा जा सकता है, यदि आवश्यक हो तो फिर से, और विशेष रूप से तैयार किए गए अवस्थापनों को रखा जाना चाहिए – उन्हें डेटाबेस द्वारा पहले रन पर पूर्व-कंपाइल किया जा सकता है, जो कुछ सेकंड बचाता है:

 "SELECT foo FROM bar WHERE a = ?" 

यदि केवल पैरामीटर बदलता है, तो निश्चित रूप से।