Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक परिणामसेट लौटाना

आपको कभी भी ResultSet pass पास नहीं करना चाहिए सार्वजनिक तरीकों के माध्यम से चारों ओर। यह संसाधन लीक होने की संभावना है क्योंकि आपको कथन और कनेक्शन को खुला रखने के लिए मजबूर किया जाता है। उन्हें बंद करने से परिणाम सेट परोक्ष रूप से बंद हो जाएगा। लेकिन उन्हें खुला रखने से वे इधर-उधर लटक जाते हैं और डीबी संसाधनों से बाहर हो जाते हैं जब उनमें से बहुत सारे खुले होते हैं।

इसे इस तरह Javabeans के संग्रह में मैप करें और इसके बजाय इसे वापस करें:

public List<Biler> list() throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    List<Biler> bilers = new ArrayList<Biler>();

    try {
        connection = database.getConnection();
        statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        resultSet = statement.executeQuery();

        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
        if (statement != null) try { statement.close(); } catch (SQLException ignore) {}
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
    }

    return bilers;
}

या, यदि आप पहले से ही जावा 7 पर हैं, तो बस का उपयोग करें। संसाधनों के साथ प्रयास करें बयान जो उन संसाधनों को स्वतः बंद कर देगा:

public List<Biler> list() throws SQLException {
    List<Biler> bilers = new ArrayList<Biler>();

    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM Biler");
        ResultSet resultSet = statement.executeQuery();
    ) {
        while (resultSet.next()) {
            Biler biler = new Biler();
            biler.setId(resultSet.getLong("id"));
            biler.setName(resultSet.getString("name"));
            biler.setValue(resultSet.getInt("value"));
            bilers.add(biler);
        }
    }

    return bilers;
}

वैसे, आपको Connection . घोषित नहीं करना चाहिए , Statement और ResultSet उदाहरण चर के रूप में (प्रमुख थ्रेडसेफ्टी समस्या!), और न ही SQLException निगलना चाहिए उस बिंदु पर (कॉल करने वाले को कोई सुराग नहीं होगा कि कोई समस्या हुई है), और न ही उसी try में संसाधनों को बंद करना होगा (यदि उदाहरण के लिए परिणाम सेट एक अपवाद फेंकता है, तो कथन और कनेक्शन अभी भी खुले हैं)। उन सभी मुद्दों को उपरोक्त कोड स्निपेट में ठीक किया गया है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में टोटल रो कैसे जोड़ें

  2. मैं CSV फ़ाइल को MySQL तालिका में कैसे आयात करूं?

  3. एक साथ कई डेटाबेस को क्वेरी करना

  4. WEEKOFYEAR () उदाहरण – MySQL

  5. एक MYSQL DB पर BLOB के रूप में संग्रहीत छवि को पुनः प्राप्त करें