2013-04-02 17 views
13

Ich mache eine Android-Anwendung mit JDBC, um Daten an die Datenbank ohne Verwendung von Web-Services zu senden. Ich habe ein Experiment mit Android 2.2 Emulator gemacht und kann Daten an MySQL DB (LOCALHOST) senden. Nachdem ich versucht habe, mit Android 2.2 Gerät zu senden, änderte ich den Pfad von jdbc:mysql://10.0.2.2:3306/ mit jdbc:mysql://xx.xx.xx.xx:3306/.Android: Wird JDBC in Android-Geräten unterstützt?

xx.xx.xx.xx ist von ipconfig meiner localhost-Maschine. Aber es funktioniert nicht im Gerät. Was könnte der Grund sein?

Haupt Zweifel:

  1. Do Android-Geräte derzeit JDBC unterstützen?
  2. Wird Android 2.2 JDBC unterstützen?
  3. Wenn unterstützt, welche Android-Versionen unterstützen JDBC?
+0

Siehe! Keiner Ihrer erwähnten Zweifel ist Ursache Ihres Problems, bitte sehen Sie meine Antwort. – Behnam

Antwort

10

Ja. Sie müssen daran denken, Ihren JDBC-Verbindungscode in eine AsyncTask, zu setzen, sonst werden Sie BURN BURN!

+1

Verwechseln Sie auch nicht "INTERNET" Erlaubnis für die "verwendet INTERNET" Erlaubnis. Sie benötigen Letzteres, um JDBC auszuführen. – Behnam

1

Laden Sie MySQL JDBC Connector 3.0.17 herunter und fügen Sie es in Ihrem Android-Projekt Build-Pfad hinzu.

import java.sql.Connection; 



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

Import android.os.Bundle; importieren 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

Bereits habe ich JAR-Datei hinzugefügt und ich tat das gleiche wie Ihr Beispiel. Aber vom Gerät funktioniert es nicht. Wie kann ich den Pfad im Gerät angeben? – sachi

+2

Vielleicht ist Ihre IP-Adresse durch Ihre Firewall blockiert, Sie müssen eine Ausnahme in der Firewall-Einstellung hinzufügen und müssen weiterleiten, wenn Sie den Router verwenden – Akilan

+1

Wenn ich diese Art von Code verwende, bedeutet das, dass jemand meine App dekompilieren und die IP finden kann. Port, Datenbankname, Benutzer und Passwort aus? –

0

Es klingt wie Ihre Mysql Installation nur Verbindungen von lokalen Host ermöglicht. Aktualisieren Sie Ihre Mysql-Konfiguration, um Verbindungen von jedem Host zu erlauben.

Von dem, was ich sehen kann, wird java.sql seit API-Level 1 unterstützt und ich denke nicht, dass der Support in Kürze entfernt wird.

/Thomas

1

Ist Android-Geräte JDBC unterstützen.

Wird Android 2.2 JDBC unterstützen?

Falls unterstützt, welche Android-Versionen unterstützen JDBC.

NO android nicht lokal MYSQL Datenbank unterstützt, damit wir verwenden JDBC-Verbindung frmo Android-Gerät nicht, seine Unterstützung nur SQLite-Datenbank.

und wenn Sie Ihre Datenbank vom Server verwenden möchten, dann machen Sie einfach eine Web-Dienste für sie, die gesamte Verbindung der Datenbank dann von Server behandelt.

aber es hilft Ihnen, JDBC und Android schrecklich zu verstehen! SO Question

+0

Ich brauche die entfernte MySQL DB. Ich möchte keinen Web-Service-Anruf tätigen. – sachi

+0

@sachi siehe ich habe meine Frage bearbeitet !! – dhams

Verwandte Themen