Esta pergunta tem 6 anos e Mark está certo de que, em quase todos os cenários que você pode imaginar, JDBC no Android é tão sensato quanto tentar usar uma torradeira no banho. No entanto, às vezes fazemos as coisas porque podemos e não porque necessariamente deveríamos, e hoje eu tinha uma razão justificável para querer fazer isso (para um aplicativo específico de muito nicho rodando em um ambiente incomum), e foi assim que encontrei essa pergunta.
Endereçando o
NoClassDefFoundError
primeiro, o motivo pelo qual não é capturado pelo catch
bloco é porque é um Error
não é uma Exception
. Ambos Error
e Exception
herdar de Throwable
, para que você possa pegar isso:catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Acredito que não seja
MySqlDataSource
que não pode encontrar, mas uma das classes ou interfaces das quais depende - no meu caso foi javax.naming.Referenceable
. O Android não fornece o javax.naming
portanto, tentar usar os recursos de pool do driver Connector/J JDBC para MySQL não o levará muito longe (você pode tentar fornecer as dependências ausentes, mas esse caminho provavelmente leva à loucura). Em vez disso, você provavelmente terá mais sorte com uma implementação de pool de conexões de terceiros. Existem várias bibliotecas Java para fazer isso. Alguns deles funcionarão no Android. Um que eu verifiquei que funciona é HikariCP . Há instruções para configurá-lo aqui e, especificamente para MySQL, aqui .