To pytanie ma 6 lat i Mark ma rację, że w prawie każdym scenariuszu, jaki możesz sobie wyobrazić, JDBC na Androida jest mniej więcej tak rozsądne, jak próba użycia tostera w wannie. Czasami jednak robimy coś, bo możemy, a nie dlatego, że koniecznie powinniśmy, i dzisiaj miałem uzasadniony powód, żeby chcieć to zrobić (dla konkretnej, bardzo niszowej aplikacji działającej w nietypowym środowisku), i tak znalazłem to pytanie.
Adresowanie NoClassDefFoundError po pierwsze, powód, dla którego nie został złapany przez catch blok jest, ponieważ jest to Error nie jest Exception . Oba Error i Exception dziedzicz z Throwable , więc możesz to złapać:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Uważam, że to nie jest MySqlDataSource że nie może znaleźć, ale jedną z klas lub interfejsów, od których zależy - w moim przypadku był to javax.naming.Referenceable . Android nie zapewnia javax.naming pakiet, więc próba użycia funkcji łączenia w pulę sterownika Connector/J JDBC dla MySQL nie zaprowadzi cię zbyt daleko (możesz spróbować podać brakujące zależności, ale ta droga prawdopodobnie prowadzi do szaleństwa).
Zamiast tego prawdopodobnie będziesz miał więcej szczęścia z implementacją puli połączeń innej firmy. Do tego służą różne biblioteki Java. Niektóre z nich będą działać na Androidzie. Jeden, który sprawdziłem, działa to HikariCP . Instrukcje jego konfiguracji znajdziesz tutaj a konkretnie dla MySQL, tutaj .