Tato otázka je stará 6 let a Mark má pravdu, že téměř ve všech scénářích, na které si vzpomenete, je JDBC na Androidu asi tak rozumné, jako zkusit použít toustovač ve vaně. Někdy však děláme věci, protože můžeme a ne proto, že bychom nutně měli, a dnes jsem měl oprávněný důvod to chtít udělat (pro konkrétní velmi specializovanou aplikaci běžící v neobvyklém prostředí), a proto jsem našel tuto otázku.
Řešení NoClassDefFoundError
za prvé, důvod, proč není zachycen pomocí catch
blok je proto, že jde o Error
není Exception
. Obě Error
a Exception
zdědit z Throwable
, takže to místo toho můžete zachytit:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Věřím, že to není MySqlDataSource
že nemůže najít, ale jednu z tříd nebo rozhraní, na kterých závisí - v mém případě to byl javax.naming.Referenceable
. Android neposkytuje javax.naming
takže pokus o použití funkcí sdružování ovladače Connector/J JDBC pro MySQL vás příliš daleko nedostane (můžete se pokusit poskytnout chybějící závislosti, ale tato cesta pravděpodobně vede k šílenství).
Místo toho budete mít pravděpodobně více štěstí s implementací fondu připojení třetí strany. K tomu existují různé Java knihovny. Některé z nich budou fungovat na Androidu. Jeden, který jsem ověřil, že funguje, je HikariCP . Pokyny pro jeho konfiguraci jsou zde a konkrétně pro MySQL zde .