Diese Frage ist 6 Jahre alt und Mark hat Recht, dass JDBC auf Android in fast jedem denkbaren Szenario so sinnvoll ist wie der Versuch, einen Toaster in der Badewanne zu benutzen. Manchmal tun wir jedoch Dinge, weil wir es können und nicht, weil wir es unbedingt sollten, und heute hatte ich einen berechtigten Grund, dies tun zu wollen (für eine bestimmte Nischen-App, die in einer ungewöhnlichen Umgebung ausgeführt wird), und so fand ich diese Frage.
Behebung des NoClassDefFoundError
zuerst der Grund, warum es nicht vom catch
abgefangen wird Block liegt daran, dass es sich um einen Error
handelt keine Exception
. Beide Error
und Exception
erben von Throwable
, sodass Sie stattdessen Folgendes abfangen könnten:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Ich glaube, dass es nicht MySqlDataSource
ist die es nicht finden kann, sondern eine der Klassen oder Schnittstellen, von denen es abhängt - in meinem Fall war es javax.naming.Referenceable
. Android stellt javax.naming
nicht bereit Paket, so dass der Versuch, die Pooling-Funktionen des Connector/J JDBC-Treibers für MySQL zu verwenden, Sie nicht sehr weit bringen wird (Sie könnten versuchen, die fehlenden Abhängigkeiten bereitzustellen, aber dieser Weg führt wahrscheinlich zum Wahnsinn).
Stattdessen haben Sie wahrscheinlich mehr Glück mit einer Verbindungspool-Implementierung eines Drittanbieters. Dafür gibt es verschiedene Java-Bibliotheken. Einige von ihnen funktionieren auf Android. Eine, von der ich überprüft habe, dass sie funktioniert, ist HikariCP . Eine Anleitung zur Konfiguration finden Sie hier und speziell für MySQL hier .