Esta pregunta tiene 6 años y Mark tiene razón en que, en casi todos los escenarios que se te ocurran, JDBC en Android es tan sensato como tratar de usar una tostadora en el baño. Sin embargo, a veces hacemos las cosas porque podemos y no porque necesariamente debamos, y hoy tuve una razón justificable para querer hacer esto (para una aplicación muy específica que se ejecuta en un entorno inusual), y así es como encontré esta pregunta.
Abordar el NoClassDefFoundError
primero, la razón por la que no es capturado por catch
bloque es porque es un Error
no es una Exception
. Ambos Error
y Exception
heredar de Throwable
, por lo que podría captar eso en su lugar:
catch (Throwable t)
{
// This will catch NoClassDefFoundError
}
Creo que no es MySqlDataSource
que no puede encontrar, pero una de las clases o interfaces de las que depende; en mi caso, fue javax.naming.Referenceable
. Android no proporciona el javax.naming
por lo que tratar de utilizar las funciones de agrupación del controlador Connector/J JDBC para MySQL no lo llevará muy lejos (podría intentar proporcionar las dependencias que faltan, pero ese camino probablemente lo lleve a la locura).
En su lugar, probablemente tendrá más suerte con la implementación de un grupo de conexiones de terceros. Hay varias bibliotecas de Java para hacer esto. Algunos de ellos funcionarán en Android. Uno que he verificado que funciona es HikariCP . Hay instrucciones para configurarlo aquí y, específicamente para MySQL, aquí .