Pertanyaan ini berumur 6 tahun dan Mark benar bahwa, di hampir setiap skenario yang dapat Anda pikirkan, JDBC di Android sama masuk akalnya dengan mencoba menggunakan pemanggang roti di bak mandi. Namun, terkadang kami melakukan sesuatu karena kami bisa dan bukan karena kami harus melakukannya, dan hari ini saya memiliki alasan yang dapat dibenarkan untuk ingin melakukan ini (untuk aplikasi khusus yang berjalan di lingkungan yang tidak biasa), begitulah cara saya menemukan pertanyaan ini.
Mengatasi NoClassDefFoundError
pertama, alasannya tidak tertangkap oleh catch
blokir karena ini adalah Error
bukan Exception
. Keduanya Error
dan Exception
mewarisi dari Throwable
, jadi Anda bisa menangkapnya sebagai gantinya:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Saya yakin itu bukan MySqlDataSource
yang tidak dapat ditemukannya, tetapi salah satu kelas atau antarmuka tempat ia bergantung - dalam kasus saya adalah javax.naming.Referenceable
. Android tidak menyediakan javax.naming
paket jadi mencoba menggunakan fitur penyatuan driver Connector/J JDBC untuk MySQL tidak akan membuat Anda terlalu jauh (Anda dapat mencoba menyediakan dependensi yang hilang tetapi jalan itu kemungkinan mengarah pada kegilaan).
Alih-alih, Anda mungkin akan lebih beruntung dengan implementasi kumpulan koneksi pihak ketiga. Ada berbagai perpustakaan Java untuk melakukan ini. Beberapa dari mereka akan bekerja di Android. Salah satu yang saya verifikasi berfungsi adalah HikariCP . Ada petunjuk untuk mengonfigurasinya di sini dan, khusus untuk MySQL, di sini .