Mysql
 sql >> Database >  >> RDS >> Mysql

Possiamo connettere il database MySQL remoto in Android usando JDBC?

Fondamentalmente:puoi connetterti al tuo server MySQL (o qualunque cosa tu usi), ma non dovresti fallo direttamente dalla tua applicazione Android.

Motivi:

  1. Le applicazioni Android possono essere decompilate e il client avrà le credenziali per accedere al tuo database. Se utilizzi gli strumenti di hacking giusti come Backtrack , questo client dannoso può accedere, connettersi e sfruttare i dati nel tuo database.

  2. Se la tua applicazione è per clienti in tutto il mondo, i client dovrebbero aprire e mantenere una connessione al tuo database per operazione o serie di operazioni. L'apertura di una connessione fisica al database richiede molto tempo, anche quando il client del PC si trova in una LAN accanto al server del motore di database. Ora, immagina di aprire una connessione da un paese dall'altra parte del mondo, ad es. Cina o Giappone o da un paese del Sud America come Brasile o Perù (dove vivo).

Per questi 2 motivi che mi vengono in mente, è una cattiva idea anche provare a connettersi a MySQL o a qualsiasi altro motore di database direttamente dal tuo dispositivo telefonico.

Come risolvere questo problema? Utilizza un'architettura orientata ai servizi in cui avrai almeno due applicazioni:

  1. Applicazione del fornitore di servizi. Questa applicazione creerà e pubblicherà servizi Web (preferibilmente RESTful) e potrebbe stabilire criteri per utilizzare i servizi Web come l'autenticazione e l'autorizzazione dell'utente. Questa applicazione si connetterà anche al database ed eseguirà operazioni CRUD su di esso.

  2. Applicazione del consumatore di servizi. Questa sarebbe la tua applicazione Android (o qualsiasi altro dispositivo mobile).

Dalla tua domanda, ti stai concentrando sul punto 1. Come ho detto nei miei commenti, puoi creare un'applicazione Web in Java, creare lì un servizio RESTful, che si riduce a un POJO (semplice vecchio oggetto java) che ha un metodo per servizio. In questo metodo, poiché dopotutto è Java semplice, puoi aggiungere altre funzionalità come l'utilizzo di JDBC.

Ecco un esempio iniziale che utilizza Jersey, Jackson (libreria JSON) e 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;
    }
}

È possibile verificare ulteriori configurazioni dell'applicazione Web Java in un tutorial come mkyong's o Vogella's o qualsiasi altro tuo simile (sono troppe informazioni da inserire in questa risposta).

Nota che quindi questa applicazione può evolversi in un'applicazione a più livelli e il codice JDBC andrà in una classe DAO, quindi ProductRestService la classe accederà al database tramite questa classe DAO. Ecco un altro esempio di kickoff:

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

E puoi applicare altre modifiche a questo progetto così come si sta evolvendo.

Puoi dirmi cosa fa PHP qui? (se sviluppo con PHP)

Invece di scrivere l'applicazione del fornitore di servizi in Java (come mostrato sopra), puoi farlo in PHP. O in Python, Ruby, C#, Scala o qualsiasi altro linguaggio di programmazione che ti fornisce questa tecnologia. Ancora una volta, non sono sicuro del tipo di tutorial che stai leggendo, ma questo dovrebbe essere spiegato da qualche parte e spiegare che ai fini di quel tutorial creerai i servizi usando PHP. Se ti senti più a tuo agio a scrivere questi servizi in Java piuttosto che in PHP o in qualsiasi altro linguaggio, non ci sono problemi. La tua app Android non si preoccupa davvero della tecnologia utilizzata per produrre i servizi Web, si preoccuperà solo di consumare i servizi e che i dati da essi possono essere consumati.