Този въпрос е на 6 години и Марк е прав, че в почти всеки сценарий, за който се сетите, JDBC на Android е толкова разумен, колкото да се опитвате да използвате тостер във ваната. Въпреки това, понякога правим неща, защото можем, а не защото непременно трябва, и днес имах основателна причина да искам да направя това (за специфично много нишово приложение, работещо в необичайна среда), така открих този въпрос.
Адресиране на NoClassDefFoundError
първо, причината да не бъде уловена от catch
блок е, защото е Error
не е Exception
. И двете Error
и Exception
наследи от Throwable
, така че вместо това можете да хванете това:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Вярвам, че това не е MySqlDataSource
който не може да намери, но един от класовете или интерфейсите, от които зависи - в моя случай беше javax.naming.Referenceable
. Android не предоставя javax.naming
пакет, така че опитът да използвате функциите за пулиране на драйвера Connector/J JDBC за MySQL няма да ви отведе много далеч (можете да опитате да предоставите липсващите зависимости, но този път вероятно води до лудост).
Вместо това вероятно ще имате повече късмет с реализация на пула за връзки от трета страна. Има различни Java библиотеки за това. Някои от тях ще работят на Android. Един, който проверих дали работи, е HikariCP . Има инструкции за конфигурирането му тук и, специално за MySQL, тук .