यह सवाल 6 साल पुराना है और मार्क सही है कि, लगभग हर परिदृश्य में आप सोच सकते हैं, एंड्रॉइड पर जेडीबीसी स्नान में टोस्टर का उपयोग करने की कोशिश करने के समान ही समझदार है। हालांकि, कभी-कभी हम चीजें करते हैं क्योंकि हम कर सकते हैं और नहीं क्योंकि हमें जरूरी होना चाहिए, और आज मेरे पास ऐसा करने का एक उचित कारण था (एक असामान्य वातावरण में चल रहे एक विशिष्ट बहुत विशिष्ट ऐप के लिए), इस तरह मुझे यह प्रश्न मिला।
NoClassDefFoundError
को संबोधित करते हुए सबसे पहले, इसका कारण catch
. द्वारा नहीं पकड़ा गया है ब्लॉक इसलिए है क्योंकि यह एक Error
है Exception
नहीं है . दोनों Error
और Exception
Throwable
. से इनहेरिट करें , ताकि आप इसके बजाय उसे पकड़ सकें:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
मेरा मानना है कि यह MySqlDataSource
नहीं है कि यह नहीं मिल रहा है, लेकिन यह उन वर्गों या इंटरफेस में से एक है जिस पर यह निर्भर करता है - मेरे मामले में यह javax.naming.Referenceable
था . Android javax.naming
प्रदान नहीं करता है पैकेज इसलिए MySQL के लिए कनेक्टर/जे जेडीबीसी ड्राइवर की पूलिंग सुविधाओं का उपयोग करने का प्रयास आपको बहुत दूर नहीं जा रहा है (आप लापता निर्भरता प्रदान करने का प्रयास कर सकते हैं लेकिन वह सड़क पागलपन की ओर ले जाती है)।
इसके बजाय आपको तृतीय-पक्ष कनेक्शन पूल कार्यान्वयन के साथ शायद अधिक भाग्य प्राप्त होगा। ऐसा करने के लिए विभिन्न जावा पुस्तकालय हैं। उनमें से कुछ Android पर काम करेंगे। एक जिसे मैंने सत्यापित किया है वह काम करता है HikariCP . इसे कॉन्फ़िगर करने के निर्देश हैं यहां और, विशेष रूप से MySQL के लिए, यहां ।