Dette spørgsmål er 6 år gammelt, og Mark har ret i, at i næsten alle scenarier, du kan komme i tanke om, er JDBC på Android omtrent lige så fornuftigt som at prøve at bruge en brødrister i badet. Men nogle gange gør vi ting, fordi vi kan og ikke, fordi vi nødvendigvis burde, og i dag havde jeg en berettiget grund til at ville gøre dette (for en specifik meget niche-app, der kører i et usædvanligt miljø), og det var sådan jeg fandt dette spørgsmål.
Adressering af NoClassDefFoundError
for det første grunden til, at den ikke fanges af catch
blokering er, fordi det er en Error
ikke en Exception
. Begge Error
og Exception
arv fra Throwable
, så du kunne fange det i stedet:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Jeg tror, at det ikke er MySqlDataSource
at den ikke kan finde, men en af de klasser eller grænseflader, som den afhænger af - i mit tilfælde var det javax.naming.Referenceable
. Android leverer ikke javax.naming
pakke, så at prøve at bruge pooling-funktionerne i Connector/J JDBC-driveren til MySQL vil ikke bringe dig ret langt (du kan prøve at give de manglende afhængigheder, men den vej fører sandsynligvis til vanvid).
I stedet vil du sandsynligvis have mere held med en tredjeparts forbindelsespuljeimplementering. Der er forskellige Java-biblioteker til at gøre dette. Nogle af dem fungerer på Android. En, som jeg har bekræftet virker, er HikariCP . Der er instruktioner til at konfigurere det her og specifikt for MySQL, her .