2011-08-28 27 views
6

Sto tentando di utilizzare JDBC nella mia applicazione Android per connettermi a un database remoto per fare inserimenti, query, ecc. Ho collegato e fatto correttamente queste cose in un progetto JAVA diverso. Così ho pensato poiché Android è Java, ho potuto solo porta il relativo codice, aggiungere lo stesso percorso di generazione per il conducente, ecc ma mi dà l'errore:Android JDBC non funziona: ClassNotFoundException sul driver

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

Io davvero non credo che sia un problema di codice poiché lo stesso codice funziona in un progetto Java (che eseguo solo in main()). Ma per riferimento qui è:

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

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

// la classe SQLUtils ho fatto:

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(); 

} 
} 

Quindi sono molto confuso qui. JDBC non funziona con Android? Se è così, dimmi quali alternative dovrei cercare per l'accesso remoto al database MySQL.

Grazie.

+0

La soluzione è qui: http: // StackOverflow.it/questions/15756230/android-is-jdbc-support-in-android-devices/18843518 # 18843518 – Behnam

+0

provare a cambiare nel file gradle targetSdkVersion 8 –

risposta

22

Does JDBC not work with Android?

JDBC è utilizzato raramente su Android e io certamente non lo consiglierei.

IMHO, JDBC è progettato per connessioni di rete a elevata larghezza di banda, a bassa latenza e altamente affidabili (ad esempio, da desktop a server di database, da server di applicazioni Web a server di database). I dispositivi mobili offrono poco di questi e nessuno di essi in modo coerente.

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

Creare un servizio Web intorno al database e accedervi da Android.

Come vantaggi collaterali, a migliorare la sicurezza (vs. lasciando aperto il database), può scaricare un po 'di logica di business da parte del cliente, può meglio supportare altre piattaforme (ad esempio, Web o Web-based quadri mobili), ecc

+0

sì, ho deciso di andare con una soluzione basata sul web. – JDS

+3

Questo thread è piuttosto vecchio, ma voglio condividere che è necessario mettere il codice di connessione e il resto in un thread asincrono non nel principale o Android lo impedirà. Ora ho la connessione funzionante. – Mikel

2

In teoria dovresti essere in grado di farlo. Devi includere il driver JDBC di MySQL Jar nel tuo progetto per far funzionare il tuo codice (here è un post simile con le soluzioni).

Ma probabilmente è not a good idea. È meglio se esponi il contenuto del database tramite un'API (REST) ​​dedicata sul tuo server.

Non forniscono davvero ragioni nel collegamento, ma uno dei motivi principali per cui è una cattiva idea esporre il database direttamente è a causa di problemi di sicurezza. La maggior parte dei tuoi utenti si comportano bene e fanno solo ciò che dovrebbero fare con il loro telefono, ma immagina di no.

Se ha un accesso valido per il proprio database, allora potrebbe semplicemente connettersi al proprio database, fare tutti i tipi di SELECTs o addirittura modificare/distruggere i dati se le autorizzazioni lo consentono.

Ecco perché dovresti avere un server web tra quelli che convalida e sanifica qualsiasi richiesta proveniente dall'utente al fine di garantire che solo i dati che intendevi distribuire possano essere recuperati dal tuo database MySQL.

4

Lasciando da parte le obiezioni valide, è possibile farlo funzionare.

In primo luogo assicuratevi di avere un barattolo guida valida nel costruire il percorso, ho usato

mysql-connector-java-5.1.7-bin.jar 

In secondo luogo, se si sta cercando nell'emulatore e il vostro DB è su di voi macchina di sviluppo, 'localhost' è non va bene nell'URL. È necessario '10 .0.2.2'

mio URL è:

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

prova di essere il mio nome db.

Ho una tabella chiamata 'libri' con un 'titolo' di colonna in esso

Il seguente codice funziona per me:

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(); 
    } 

} 

Varcata nel debugger, vedo i titoli nella stringa

8

Ho avuto un sacco di problemi con questo per qualche motivo. Si dice altrove che funziona solo il driver 3.017, e dal momento che ho fatto istruzioni così dettagliate ho pensato di condividerle. (Il mio scopo iniziale era quello di dare passaggi per riprodurre l'errore che potrei usare per fare una domanda qui e altrove. No, non posso cominciare a indovinare perché ho avuto così tanti problemi ora guardando indietro)


Per : Ottenere driver JDBC in Android

  • nuovo Android project - AndroidJDBCTest, target Android4.03, sdk minimo 8 (Android 2.2), il nome del pacchetto “com.test.AndroidJDBCTest”
  • Fare clic destro sul progetto, nuova cartella "libs"
  • Scarica Mysql JDBC Driver da here ed estrailo nel tuo filesystem.
  • Passare alla directory radice dopo l'estrazione e trascinare e rilasciare il file jar mysql-connector-java-3.0.17-ga-bin.jar in/libs nel progetto in Esplora progetti in Eclipse., Utilizzando l'impostazione predefinita "copia" per il trascinamento della selezione.
  • clic destro sul progetto Eclipse, Build Path-Configure Build Path, Aggiungi JAR sotto scheda Librerie - Individuare/AndroidJDBCTest/libs e il file jar e cliccare su OK
  • NOTA: Si presenta ora sotto “ha fatto riferimento Librerie” nodo (se Eclipse è impostato per mostrarlo)
  • Aggiungere il codice da here alla fine del onCreate() - fondamentalmente Class.forName("com.mysql.jdbc.Driver").newInstance();
  • Collegare dispositivo Honeycomb come il Motorola Xoom Family Edition ed eseguire
0

assicurarsi di avere collocato il connettore ins e la cartella della biblioteca del progetto. posto lì, che possa risolvere il problema

-1

provare a cambiare inthe file di Gradle

targetSdkVersion 8 
Problemi correlati