2011-08-28 17 views
6

Próbuję użyć JDBC w mojej aplikacji na Androida, aby połączyć się ze zdalną bazą danych w celu wstawiania wstawek, zapytań itp. Udało mi się połączyć i zrobić te rzeczy w innym projekcie JAVA. Więc pomyślałem, ponieważ Android jest Java, mogę tylko portu nad odpowiednim kodem, dodać tę samą ścieżkę kompilacji dla kierowcy, itp Ale to daje mi błąd:Android JDBC nie działa: ClassNotFoundException na sterowniku

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

I naprawdę nie sądzę, że jest to Problem z kodem, ponieważ ten sam kod działa w projekcie Java (który po prostu wykonuję w main()). Ale dla odniesienia tutaj jest:

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

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

// klasa SQLUtils zrobiłem:

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

} 
} 

Więc jestem naprawdę mylić tutaj. Czy JDBC nie działa z systemem Android? Jeśli tak, to powiedz mi, jakie alternatywy powinienem szukać, aby uzyskać zdalny dostęp do bazy danych MySQL.

Dzięki.

+0

rozwiązanie jest tutaj: http: // stackoverflow.com/questions/15756230/android-is-jdbc-supported-in-android-devices/18843518 # 18843518 – Behnam

+0

spróbuj zmienić w gradle file targetSdkVersion 8 –

Odpowiedz

22

Does JDBC not work with Android?

JDBC jest rzadko używany w systemie Android i na pewno nie poleciłbym go.

IMHO, JDBC przeznaczony jest do połączeń sieciowych o wysokiej przepustowości, niskich opóźnieniach i niezawodności (np. Komputer stacjonarny do serwera bazy danych, serwer aplikacji WWW do serwera bazy danych). Urządzenia mobilne oferują niewiele z nich, a żadna z nich nie jest spójna.

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

Utwórz usługę sieci Web wokół bazy danych i uzyskaj dostęp do niej z systemu Android.

Jako korzyści uboczne, poprawiamy bezpieczeństwo (w przeciwieństwie do pozostawiania otwartej bazy danych), możemy odciążyć niektóre logiki biznesowe od klienta, możemy lepiej wspierać inne platformy (np. Internetowe lub mobilne platformy mobilne), itp.

+0

Tak, zdecydowałem się na rozwiązanie internetowe. – JDS

+3

Ten wątek jest dość stary, ale chcę się podzielić, że konieczne jest umieszczenie kodu połączenia, a reszta w wątku asynchronicznym, a nie w głównym lub Androidzie, będzie to utrudniać. Teraz mam połączenie działa. – Mikel

2

Teoretycznie powinieneś być w stanie to zrobić. Do projektu należy dołączyć sterownik JDBC JDBC MySQL, aby kod działał (here to podobny post z rozwiązaniami). Jest to prawdopodobnie not a good idea. Lepiej jest, jeśli eksponujesz zawartość bazy danych poprzez dedykowany (REST) ​​API na twoim serwerze.

Tak naprawdę nie podają przyczyn w linku, ale jednym z głównych powodów, dla których nie jest dobrym pomysłem na bezpośrednie udostępnienie bazy danych, są obawy dotyczące bezpieczeństwa. Większość użytkowników będzie zachowywać się dobrze i robić tylko to, co mają zrobić ze swoim telefonem, ale wyobraźcie sobie, że tak się nie dzieje.

Jeśli posiada ważny login do bazy danych, może po prostu połączyć się z bazą danych, wykonać wszystkie rodzaje SELECT, a nawet może zmienić/zniszczyć dane, jeśli pozwalają na to uprawnienia.

Dlatego właśnie powinieneś mieć serwer WWW, który potwierdza i odbiera wszystkie żądania przychodzące od użytkownika, aby zapewnić, że tylko dane, które zamierzasz przekazać, mogą być pobierane z bazy danych MySQL.

4

Pomijając ważne zastrzeżenia, możesz można sprawiają, że działa.

Po pierwsze upewnij się, że masz ważny słoik sterownika w tobie zbudować ścieżkę, użyłem

mysql-connector-java-5.1.7-bin.jar 

Po drugie, jeśli próbujesz go w emulatorze a db jest na Ciebie maszyna rozwój „localhost” jest nic dobrego w adresie URL. Musisz '10 .0.2.2'

Moje URL:

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

badanie jest moja nazwa db.

Mam tabeli o nazwie „książki” z kolumny „Tytuł” ​​w nim

Poniższy kod działa dla mnie:

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

} 

Krocząc przez w debugger, widzę tytuły in String entry

8

Z jakiegoś powodu miałem z tym kłopot. W innych miejscach wspomina się, że działa tylko sterownik 3.017, a ponieważ wydałem tak szczegółowe instrukcje, pomyślałem, że je udostępnię. (My Początkowym celem było dać kroki w celu odtworzenia błędu, że mogę użyć, aby zadać pytanie tutaj i gdzie indziej. Nie, nie mogę odgadnąć, dlaczego miałem tyle kłopotów teraz patrząc wstecz)


Aby : Pobierz sterownik JDBC w Android app

  • Nowy Android Project - AndroidJDBCTest, Target Android4.03, minimum 8 SDK (Android 2.2), nazwa pakietu „com.test.AndroidJDBCTest”
  • prawym przyciskiem myszy na projekt, nowy folder "libs"
  • Pobierz sterownik Mysql JDBC od here i rozpakuj go do swojego systemu plików.
  • Przejdź do katalogu głównego po wypakowaniu i przeciągnij i upuść jar mysql-connector-java-3.0.17-ga-bin.jar do/libs w projekcie w eksploratorze projektu w środowisku Eclipse., Używając domyślnego ustawienia "kopiuj" dla przeciągania i upuszczania.
  • prawym przyciskiem myszy na Eclipse Project Build Path-Configure Build Path, Add JAR w zakładce Biblioteki - Przejdź do/AndroidJDBCTest/libs i pliku jar i kliknij OK
  • UWAGA: To pokazuje się pod „odwołuje Bibliotek” węzeł (jeśli Eclipse jest ustawiony, aby pokazać)
  • dodać kod z here do końca onCreate() - w zasadzie Class.forName("com.mysql.jdbc.Driver").newInstance();
  • Dołączyć urządzenie Honeycomb, takich jak Motorola Xoom rodzinnym Edition i uruchom
0

Upewnij się, że masz umieścił złącze insid e folder biblioteki projektu. miejsce tam, to rozwiąże problemu

-1

Spróbuj zmienić inthe Gradle plikowi

targetSdkVersion 8 
Powiązane problemy