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 .