2011-08-28 30 views
6

Estoy tratando de usar JDBC en mi aplicación Android para conectarme a una base de datos remota para hacer inserciones, consultas, etc. He conectado y hecho estas cosas con éxito en un proyecto JAVA diferente. Así que pensé, ya que Android es Java, tan sólo pudiera puerto sobre el código en cuestión, añadir la misma ruta de compilación para el conductor, etc, pero me da el error:Android JDBC no funciona: ClassNotFoundException en el controlador

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

Realmente no creo que es una problema de código ya que el mismo código funciona en un proyecto de Java (que acabo de ejecutar en main()). Pero para referencia aquí está:

String url = "jdbc:mysql://localhost:3306/eventhub_test"; // 
    String user = "root"; 
    String pass = ""; 

SQLUtils sqlu = new SQLUtils(url, user, pass); 

// la clase SQLUtils hice:

public class SQLUtils { 


private String CONNECTION_URL; 
private String user; 
private String pass; 
private java.sql.Statement stmt; 
private java.sql.Connection conn; 

public SQLUtils(String conn_url, String user, String pass) { 
    this.CONNECTION_URL = conn_url; 
    this.user = user; 
    this.pass = pass; 
} 


public void init() throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException { 

    Class.forName ("com.mysql.jdbc.Driver").newInstance(); 
    conn = DriverManager.getConnection(CONNECTION_URL, user, pass); 
    stmt = conn.createStatement(); 

} 
} 

Así que estoy realmente confundido aquí. ¿JDBC no funciona con Android? Si es así, dígame qué alternativas debería considerar para acceder remotamente a la base de datos MySQL.

Gracias.

+0

Su solución está aquí: http: // stackoverflow.com/questions/15756230/android-es-jdbc-supported-in-android-devices/18843518 # 18843518 – Behnam

+0

intente cambiar en el archivo gradle targetSdkVersion 8 –

Respuesta

22

Does JDBC not work with Android?

JDBC se utiliza con poca frecuencia en Android, y ciertamente no lo recomendaría.

En mi humilde opinión, JDBC está diseñado para conexiones de red de gran ancho de banda, baja latencia y altamente confiables (por ejemplo, escritorio a servidor de base de datos, servidor de aplicaciones web a servidor de bases de datos). Los dispositivos móviles ofrecen poco de estos, y ninguno de ellos consistentemente.

If so, tell me what alternatives I should look into for remote MySQL database access.

Cree un servicio web alrededor de su base de datos y acceda desde Android.

Como beneficios secundarios, a mejorar la seguridad (frente a salir de su base de datos abierta), se puede descargar parte lógica de negocio del cliente, puede apoyar mejor a otras plataformas (por ejemplo, Internet o marcos móviles basados ​​en la web), etc.

+0

sí, decidí ir con una solución basada en web. – JDS

+3

Este hilo es bastante viejo, pero quiero compartir que es necesario poner el código de conexión y el resto en un hilo asincrónico no en el principal o Android lo impedirá. Ahora tengo la conexión funcionando. – Mikel

2

En teoría, debería poder hacer eso. Debe incluir el controlador JDBC de MySQL en su proyecto para que el código funcione (here es una publicación similar con soluciones).

Pero es probablemente not a good idea. Es mejor si expone los contenidos de la base de datos a través de una API dedicada (REST) ​​en su servidor.

Realmente no dan razones en el enlace, pero una de las razones principales por las que es una mala idea exponer su base de datos directamente es por cuestiones de seguridad. La mayoría de tus usuarios se portarán bien y harán solo lo que se supone que deben hacer con su teléfono, pero imagina que no.

Si tiene un inicio de sesión válido para su base de datos, entonces él/ella podría simplemente conectarse a su base de datos, hacer todo tipo de SELECT o incluso cambiar/destruir datos si los permisos lo permiten.

Es por eso que debe tener un servidor web intermedio que valide y desinfecte todas las solicitudes provenientes del usuario para asegurarse de que solo los datos que pretende distribuir se puedan recuperar de su base de datos MySQL.

4

Dejando a un lado las objeciones válidas, usted puede hacer que funcione.

En primer lugar asegúrese de que tiene un tarro de conducir válida en construir camino, solía

mysql-connector-java-5.1.7-bin.jar 

En segundo lugar, si usted está tratando en el emulador y su base de datos está en ti máquina de desarrollo, 'localhost' es no es bueno en la URL. Es necesario '10 .0.2.2'

Mi URL es:

String url = "jdbc:mysql://10.0.2.2/test"; 

de ensayo que es mi nombre db.

Tengo una tabla llamada 'libros' con un 'título' de columna en ella

El siguiente código funciona para mí:

public void init() throws IllegalAccessException, InstantiationException, 
     ClassNotFoundException, SQLException { 

    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    try { 
     conn = DriverManager.getConnection(CONNECTION_URL, user, pass); 
    } catch (java.sql.SQLException e1) { 
     e1.printStackTrace(); 
    } 
    try { 

     stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT title FROM books"); 
     String entry; 
     while (rs.next()){ 
      entry = rs.getString(1); 
     } 
     rs.close(); 
     stmt.close(); 
     conn.close(); 
    } catch (java.sql.SQLException e) { 
     e.printStackTrace(); 
    } 

} 

Al cruzar en el depurador, veo los títulos en la entrada de cadena

8

Tuve un TON de problemas con esto por alguna razón. Se menciona en otra parte que solo el controlador 3.017 funciona, y dado que hice tales instrucciones detalladas pensé que las compartiría. (Mi propósito inicial era dar pasos para reproducir el error que se podría utilizar para hacer una pregunta aquí y en otros lugares. No, no puedo empezar a adivinar por qué tenía tantos problemas ahora mirando hacia atrás)


Para : Obtener el controlador JDBC en la aplicación para Android

  • nuevo proyecto Android - AndroidJDBCTest, Target Android4.03, SDK mínimo de 8 (Android 2.2), el nombre del paquete “com.test.AndroidJDBCTest”
  • Haga clic derecho sobre el proyecto, nuevo carpeta "libs"
  • Descargar Mysql JDBC Driver desde here y extráigalo a su sistema de archivos.
  • Examine el directorio raíz después de extraer y arrastre y suelte jar mysql-connector-java-3.0.17-ga-bin.jar en/libs en su proyecto en el explorador de proyectos dentro de Eclipse., Usando la configuración de "copia" predeterminada para arrastrar y soltar.
  • clic derecho en el Proyecto Eclipse, Vía de construcción-Configurar Vía de construcción, Agregar archivo JAR en la pestaña bibliotecas - Ver a/AndroidJDBCTest/libs y el archivo jar y haga clic en OK
  • NOTA: Se muestra ahora bajo “hizo referencia a Bibliotecas” nodo (si Eclipse está configurado para mostrar que)
  • código agrega desde here hasta el final de onCreate() - básicamente Class.forName("com.mysql.jdbc.Driver").newInstance();
  • Acople dispositivo de nido de abeja como Edición familia de Motorola Xoom y ejecutar
0

Asegúrese de que usted tiene coloque el conector en el interior e la carpeta de la biblioteca del proyecto. lugar allí, se va a resolver el problema

-1

intente cambiar enel archivo Gradle

targetSdkVersion 8 
Cuestiones relacionadas