Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Können wir eine Remote-MySQL-Datenbank in Android mit JDBC verbinden?

Grundsätzlich gilt:Sie können sich mit Ihrem MySQL-Server (oder was auch immer Sie verwenden) verbinden, aber sollten Sie nicht Tun Sie dies direkt über Ihre Android-Anwendung.

Gründe:

  1. Android-Anwendungen können dekompiliert werden, und der Client verfügt über Anmeldeinformationen für den Zugriff auf Ihre Datenbank. Wenn Sie die richtigen Hacking-Tools wie Backtrack verwenden , dann kann dieser bösartige Client auf die Daten in Ihrer Datenbank zugreifen, eine Verbindung herstellen und sie ausnutzen.

  2. Wenn Ihre Anwendung für Clients auf der ganzen Welt bestimmt ist, sollten die Clients pro Vorgang oder Satz von Vorgängen eine Verbindung zu Ihrer Datenbank öffnen und aufrechterhalten. Das Öffnen einer physischen Datenbankverbindung nimmt viel Zeit in Anspruch, selbst wenn sich Ihr PC-Client in einem LAN neben dem Datenbank-Engine-Server befindet. Stellen Sie sich nun vor, Sie öffnen eine Verbindung von einem Land auf der anderen Seite der Welt, z. China oder Japan oder aus einem südamerikanischen Land wie Brasilien oder Peru (wo ich lebe).

Aus diesen 2 Gründen, die mir einfallen, ist es eine schlechte Idee, auch nur zu versuchen, sich direkt von Ihrem Telefongerät aus mit MySQL oder einer anderen Datenbank-Engine zu verbinden.

Wie kann man dieses Problem lösen? Verwenden Sie eine serviceorientierte Architektur, bei der Sie mindestens zwei Anwendungen haben:

  1. Dienstanbieteranwendung. Diese Anwendung erstellt und veröffentlicht Webdienste (vorzugsweise RESTful) und kann Richtlinien zur Nutzung der Webdienste wie Benutzerauthentifizierung und -autorisierung festlegen. Diese Anwendung stellt auch eine Verbindung zur Datenbank her und führt CRUD-Operationen darauf aus.

  2. Service-Consumer-Anwendung. Dies wäre Ihre Android- (oder eine andere mobile) Anwendung.

Von Ihrer Frage aus konzentrieren Sie sich auf Punkt 1. Wie ich in meinen Kommentaren gesagt habe, können Sie eine Webanwendung in Java erstellen, dort einen RESTful-Dienst erstellen, der auf ein POJO (einfaches altes Java-Objekt) hinausläuft hat eine Methode pro Dienst. Da es sich bei dieser Methode doch um reines Java handelt, können Sie weitere Funktionen wie die Verwendung von JDBC hinzufügen.

Hier ist ein Kickoff-Beispiel mit Jersey, Jackson (JSON-Bibliothek) und JDBC:

@Path("/product")
public class ProductRestService {

    @GET
    @Path("/list")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Product> getProducts() {
        List<Product> productList = new ArrayList<>();
        Connection con = ...; //retrieve your database connection
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT id, name FROM product");
        while (rs.next()) {
            Product product = new Product();
            product.setId(rs.getInt("id"));
            product.setName(rs.getString("name"));
            productList.add(product);
        }
        //ALWAYS close the resources
        rs.close();
        stmt.close();
        conn.close();
        return productList;
    }
}

Weitere Konfigurationen der Java-Webanwendung finden Sie in einem Tutorial wie mkyong's oder Vogellas oder andere Ihrer Art (es sind zu viele Informationen, um sie in diese Antwort aufzunehmen).

Beachten Sie, dass sich diese Anwendung dann zu einer mehrschichtigen Anwendung entwickeln kann und der JDBC-Code in eine DAO-Klasse und dann in den ProductRestService geht Die Klasse greift über diese DAO-Klasse auf die Datenbank zu. Hier ist ein weiteres Kickoff-Beispiel:

public class ProductDao {
    public List<Product> getProducts() {
        List<Product> productList = new ArrayList<>();
        Connection con = ...; //retrieve your database connection
        //the rest of the code explained above...
        return productList;
    }
}

@Path("/product")
public class ProductRestService {
    @GET
    @Path("/list")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Product> getProducts() {
        ProductDao productDao = new ProductDao();
        return productDao.getProducts();
    }
}

Und Sie können weitere Änderungen an diesem Projekt vornehmen und sich weiterentwickeln.

Können Sie mir sagen, was PHP hier macht? (wenn ich mit PHP entwickle)

Anstatt die Dienstanbieteranwendung in Java zu schreiben (wie oben gezeigt), können Sie dies in PHP tun. Oder in Python, Ruby, C#, Scala oder jeder anderen Programmiersprache, die Ihnen diese Technologie zur Verfügung stellt. Auch hier bin ich mir nicht sicher, welche Art von Tutorial Sie lesen, aber dies sollte irgendwo erklärt werden und erklären, dass Sie für die Zwecke dieses Tutorials die Dienste mit PHP erstellen werden. Wenn Sie diese Dienste lieber in Java als in PHP oder einer anderen Sprache schreiben möchten, gibt es kein Problem. Ihre Android-App kümmert sich nicht wirklich darum, welche Technologie verwendet wird, um die Webdienste zu produzieren, sie kümmert sich nur darum, die Dienste zu konsumieren und dass die Daten von ihnen konsumiert werden können.