मैं एक java.util.Iterator अंदर एक java.sql.RecordSet लपेटकर कर रहा हूँ। मेरा सवाल यह है कि, यदि किसी रिकॉर्डसेट विधि में SQLException फेंकता है तो मुझे क्या करना चाहिए?कैसे जांचे हुए अपवादों के साथ कार्यान्वयन सौदा iterator चाहिए?
java.util.Iterator javadoc बताते हैं जो अपवाद विभिन्न परिस्थितियों में (यानी NoSuchElementException मामले आप अगले() पिछले तत्व से परे फोन में) फेंक
हालांकि, यह जब वहाँ एक पूरी तरह से असंबंधित समस्या यह है कि क्या करना है का उल्लेख नहीं करता उदाहरण के कारण नेटवर्क या डिस्क आईओ समस्याएं। क्योंकि यह इटरेटर इंटरफेस के साथ असंगत है
अगले() और hasNext() में, बस फेंक SQLException संभव नहीं है।
public class MyRecordIterator implements Iterator<Record>
{
private final ResultSet rs;
public MyRecordIterator() throws SQLException
{
rs = getConnection().createStatement().executeQuery(
"SELECT * FROM table");
}
@Override
public boolean hasNext()
{
try
{
return !rs.isAfterLast();
}
catch (SQLException e)
{
// ignore, hasNext() can't throw SQLException
}
}
@Override
public Record next()
{
try
{
if (rs.isAfterLast()) throw new NoSuchElementException();
rs.next();
Record result = new Record (rs.getString("column 1"), rs.getString("column 2")));
return result;
}
catch (SQLException e)
{
// ignore, next() can't throw SQLException
}
}
@Override
public void remove()
{
throw new UnsupportedOperationException("Iterator is read-only");
}
}
अच्छा विचार है। आप किस अपवाद की सिफारिश करते हैं? क्या इसके लिए एक स्वीकार्य अभ्यास है? – amarillion
उम्मीद है कि मदद करता है - यदि आप इसे उपयुक्त महसूस करते हैं, तो आप मौजूदा रनटाइम अपवाद जैसे कि अवैध महसूस करते हैं, मुझे संदेह है कि आप अपना स्वयं का अपवाद सबक्लास बनाना चाहते हैं यदि आप इसे आगे संसाधित करना चाहते हैं और अपवाद को अपने आवेदन के संदर्भ में सार्थक बनाना चाहते हैं । – Brabster
कोड कई iterators हैं, तो यह banishing में खत्म हो सकता है अपवाद जाँच की। यह जावा कोने डिजाइन द्वारा टूटा हुआ प्रतीत होता है। – ceving