Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pouvons-nous connecter une base de données MySQL distante dans Android à l'aide de JDBC ?

Fondamentalement :vous pouvez vous connecter à votre serveur MySQL (ou tout ce que vous utilisez), mais vous ne devriez pas faites-le directement depuis votre application Android.

Raisons :

  1. Les applications Android peuvent être décompilées et le client aura des informations d'identification pour accéder à votre base de données. Si vous utilisez les bons outils de piratage comme Backtrack , alors ce client malveillant peut accéder, se connecter et exploiter les données de votre base de données.

  2. Si votre application est destinée à des clients du monde entier, les clients doivent ouvrir et maintenir une connexion à votre base de données par opération ou ensemble d'opérations. L'ouverture d'une connexion physique à une base de données prend beaucoup de temps, même lorsque votre client PC se trouve dans un réseau local à côté du serveur du moteur de base de données. Maintenant, imaginez l'ouverture d'une connexion à partir d'un pays à l'autre bout du monde, par ex. Chine ou Japon ou d'un pays d'Amérique du Sud comme le Brésil ou le Pérou (où je vis).

Pour ces 2 raisons que je peux trouver, c'est une mauvaise idée même d'essayer de se connecter à MySQL ou à tout autre moteur de base de données directement depuis votre appareil téléphonique.

Comment résoudre ce problème? Utilisez une architecture orientée services où vous aurez au moins deux applications :

  1. Demande de fournisseur de services. Cette application créera et publiera des services Web (de préférence RESTful) et pourra établir des politiques pour utiliser les services Web comme l'authentification et l'autorisation des utilisateurs. Cette application se connectera également à la base de données et exécutera des opérations CRUD sur celle-ci.

  2. Application consommateur de services. Ce serait votre application Android (ou toute autre application mobile).

D'après votre question, vous vous concentrez sur le point 1. Comme je l'ai dit dans mes commentaires, vous pouvez créer une application Web en Java, y créer un service RESTful, qui se résume à un POJO (plain old java object) qui a une méthode par service. Dans cette méthode, puisqu'il s'agit de Java après tout, vous pouvez ajouter d'autres fonctionnalités telles que l'utilisation de JDBC.

Voici un exemple de lancement utilisant Jersey, Jackson (bibliothèque JSON) et 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;
    }
}

Vous pouvez vérifier d'autres configurations de l'application Web Java dans un tutoriel comme mkyong's ou Vogella ou tout autre de votre genre (c'est trop d'informations à placer dans cette réponse).

Notez qu'alors cette application peut évoluer vers une application en couches, et le code JDBC ira dans une classe DAO, puis le ProductRestService accédera à la base de données via cette classe DAO. Voici un autre exemple de lancement :

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

Et vous pouvez appliquer d'autres modifications à ce projet en cours d'évolution.

Pouvez-vous me dire ce que PHP fait ici ? (si je développe en PHP)

Au lieu d'écrire l'application du fournisseur de services en Java (comme indiqué ci-dessus), vous pouvez le faire en PHP. Ou en Python, Ruby, C#, Scala ou tout autre langage de programmation qui vous fournit cette technologie. Encore une fois, je ne sais pas quel type de didacticiel vous lisez, mais cela devrait être expliqué quelque part et expliquer que pour les besoins de ce didacticiel, vous allez créer les services à l'aide de PHP. Si vous vous sentez plus à l'aise pour écrire ces services en Java plutôt qu'en PHP ou tout autre langage, il n'y a pas de problème. Votre application Android ne se soucie pas vraiment de la technologie utilisée pour produire les services Web, elle ne se souciera que de la consommation des services et du fait que les données qu'ils contiennent peuvent être consommées.