2013-04-02 12 views
13

Robię aplikację na Androida, używając JDBC do wysyłania danych do bazy danych bez korzystania z żadnych usług internetowych. Zrobiłem eksperyment używając emulatora Androida 2.2 i jestem w stanie wysyłać dane do MySQL DB (LOCALHOST). Potem próbowałem wysłać przy użyciu urządzenia Android 2.2, zmieniłem ścieżkę z jdbc:mysql://10.0.2.2:3306/ z jdbc:mysql://xx.xx.xx.xx:3306/.Android: Czy JDBC jest obsługiwany na urządzeniach z Androidem?

xx.xx.xx.xx jest z ipconfig mojego komputera localhost. Ale nie działa w urządzeniu. Jaki mógł być powód.

Główne wątpliwości:

  1. Do urządzenia Android obecnie obsługują JDBC?
  2. Czy Android 2.2 obsługuje JDBC?
  3. Jeśli jest obsługiwana, które wersje Androida będą obsługiwały JDBC?
+0

Oto! Żadna z twoich wymienionych wątpliwości nie jest przyczyną twojego problemu, zobacz moją odpowiedź. – Behnam

Odpowiedz

10

Tak. Musisz pamiętać, aby umieścić kod połączenia JDBC w postaci AsyncTask, , w przeciwnym razie BURN BURN BURN BURN!

+1

Nie należy również mylić zezwolenia "INTERNET" na uprawnienie "wykorzystuje INTERNET". Potrzebujesz tego ostatniego do wykonania JDBC. – Behnam

1

Pobierz MySQL JDBC Connector 3.0.17 i dodaj go do swojej androidowej ścieżki budowania projektu. android.os.Bundle

import java.sql.Connection; 



import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.Statement; 
import android.app.Activity; 

importowania; import android.widget.TextView;

public class MysqlSample01Activity extends Activity { 

private static final String url = "jdbc:mysql://<server>:<port>/<database>"; 
private static final String user = "<username>"; 
private static final String pass = "<password>"; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    testDB(); 
} 

public void testDB() { 
    TextView tv = (TextView)this.findViewById(R.id.text_view); 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection con = DriverManager.getConnection(url, user, pass); 
     /* System.out.println("Database connection success"); */ 

     String result = "Database connection success\n"; 
     Statement st = con.createStatement(); 
     ResultSet rs = st.executeQuery("select * from table_name"); 
     ResultSetMetaData rsmd = rs.getMetaData(); 

     while(rs.next()) { 
      result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n"; 
      result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n"; 
      result += rsmd.getColumnName(3) + ": " + rs.getString(3) + "\n"; 
     } 
     tv.setText(result); 
    } 
    catch(Exception e) { 
     e.printStackTrace(); 
     tv.setText(e.toString()); 
    } 

} 

}

+0

Już dodałem plik JAR i zrobiłem to samo, co twój przykład. Ale z urządzenia nie działa. Jak mogę podać ścieżkę w urządzeniu? – sachi

+2

Może twój adres IP jest zablokowany przez twoją zaporę sieciową musisz dodać wyjątek w ustawieniach zapory sieciowej i przenieść port do przodu, jeśli używasz routera – Akilan

+1

Jeśli używam tego rodzaju kodu, oznacza to, że ktoś może zdekompilować moją aplikację i znaleźć adres IP, port, dbname, użytkownik i hasło na zewnątrz? –

0

Brzmi jak instalacja MySQL pozwala tylko na połączenia z hostem lokalnym. Zaktualizuj konfigurację Mysql, aby umożliwić połączenia z dowolnego hosta.

Z tego, co widzę, java.sql jest obsługiwany od poziomu API 1 i nie sądzę, że wsparcie zostanie usunięte w najbliższym czasie.

/Thomas

1

Czy urządzenia z Androidem obsługują JDBC.

Czy Android 2.2 obsługuje JDBC.

Jeśli jest obsługiwana, to które wersje Androida będą obsługiwały JDBC.

NO android nie obsługuje lokalnie bazy danych MySQL, więc nie można użyć połączenia JDBC frmo Android urządzenia, jego obsługi tylko SQLite bazy danych.

a jeśli chcesz użyć bazy danych z serwera, po prostu utwórz dla niej usługi sieciowe, a następnie połącz się z bazą danych, a następnie przetwórz z serwera.

jakkolwiek pomaga to zrozumieć JDBC i android straszne !! SO Question

+0

Potrzebuję użyć zdalnego MySQL DB. Nie chcę wykonywać żadnych zgłoszeń serwisowych. – sachi

+0

@sachi widzę, że zredagowałem moje pytanie !! – dhams

Powiązane problemy