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

स्प्रिंग JDBC कनेक्शन पूल और इनपुटस्ट्रीम परिणाम

दुर्भाग्य से, जब आपने यह सवाल पूछा तो मेरी कल्पना जंगली हो गई। मुझे नहीं पता कि क्या यह समाधान अधिक सुरुचिपूर्ण माना जाता है। हालाँकि, ये कक्षाएं सरल और आसानी से पुन:उपयोग योग्य हैं, इसलिए यदि वे संतोषजनक नहीं हैं तो आप उनके लिए उपयोग कर सकते हैं। आप अंत में सब कुछ एक साथ आते हुए देखेंगे...

public class BinaryCloseable implements Closeable {

    private Closeable first;
    private Closeable last;

    public BinaryCloseable(Closeable first, Closeable last) {
        this.first = first;
        this.last = last;
    }

    @Override
    public void close() throws IOException {
        try {
            first.close();
        } finally {
            last.close();
        }
    }

}

BinaryCloseable CompositeCloseable . द्वारा उपयोग किया जाता है :

public class CompositeCloseable implements Closeable {

    private Closeable target;

    public CompositeCloseable(Closeable... closeables) {
        target = new Closeable() { public void close(){} };
        for (Closeable closeable : closeables) {
            target = new BinaryCloseable(target, closeable);
        }
    }

    @Override
    public void close() throws IOException {
        target.close();
    }

}

ResultSetCloser ResultSet को बंद कर देता है ऑब्जेक्ट:

public class ResultSetCloser implements Closeable {

    private ResultSet resultSet;

    public ResultSetCloser(ResultSet resultSet) {
        this.resultSet = resultSet;
    }

    @Override
    public void close() throws IOException {
        try {
            resultSet.close();
        } catch (SQLException e) {
            throw new IOException("Exception encountered while closing result set", e);
        }
    }

}

PreparedStatementCloser PreparedStatement को बंद कर देता है ऑब्जेक्ट:

public class PreparedStatementCloser implements Closeable {

    private PreparedStatement preparedStatement;

    public PreparedStatementCloser(PreparedStatement preparedStatement) {
        this.preparedStatement = preparedStatement;
    }

    @Override
    public void close() throws IOException {
        try {
            preparedStatement.close();
        } catch (SQLException e) {
            throw new IOException("Exception encountered while closing prepared statement", e);
        }
    }

}

ConnectionCloser Connection को बंद कर देता है ऑब्जेक्ट:

public class ConnectionCloser implements Closeable {

    private Connection connection;

    public ConnectionCloser(Connection connection) {
        this.connection = connection;
    }

    @Override
    public void close() throws IOException {
        try {
            connection.close();
        } catch (SQLException e) {
            throw new IOException("Exception encountered while closing connection", e);
        }
    }

}

अब हम आपके मूल InputStream . को रिफलेक्टर करते हैं में विचार:

public class ClosingInputStream extends InputStream {

    private InputStream stream;
    private Closeable closer;

    public ClosingInputStream(InputStream stream, Closeable closer) {
        this.stream = stream;
        this.closer = closer;
    }

    // The other InputStream methods...

    @Override
    public void close() throws IOException {
        closer.close();
    }

}

अंत में, यह सब एक साथ आता है:

new ClosingInputStream(
        stream,
        new CompositeCloseable(
                stream,
                new ResultSetCloser(resultSet),
                new PreparedStatementCloser(statement),
                new ConnectionCloser(connection)
            )
    );

जब यह ClosingInputStream का close() विधि कहा जाता है, यह प्रभावी रूप से होता है (स्पष्टता के लिए छोड़े गए अपवाद हैंडलिंग के साथ):

public void close() {
    try {
        try {
            try {
                try {
                    // This is empty due to the first line in `CompositeCloseable`'s constructor
                } finally {
                    stream.close();
                }
            } finally {
                resultSet.close();
            }
        } finally {
            preparedStatement.close();
        }
    } finally {
        connection.close();
    }
}

अब आप अधिक से अधिक Closeable . को बंद करने के लिए स्वतंत्र हैं वस्तुओं को आप पसंद करते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं कैसे पुष्टि कर सकता हूं कि डेटाबेस Oracle है और यह किस संस्करण में SQL का उपयोग कर रहा है?

  2. Oracle PL/SQL में INR मुद्रा (भारतीय रुपये) के लिए अंकों/संख्याओं को शब्दों में बदलना

  3. एक सही SQL कब गलत परिणाम देगा

  4. तालिका में अंतिम और दूसरी अंतिम प्रविष्टि के मूल्यों की तुलना कैसे करें?

  5. पीएल/एसक्यूएल तालिका नाम को पीएल/एसक्यूएल प्रक्रिया में एक चर के रूप में उपयोग करने में असमर्थ?