sql >> Base de Datos >  >> RDS >> Mysql

¿Podemos conectar la base de datos MySQL remota en Android usando JDBC?

Básicamente:puedes conectarte a tu servidor MySQL (o lo que sea que uses), pero no debes haz esto directamente desde tu aplicación de Android.

Razones:

  1. Las aplicaciones de Android se pueden descompilar y el cliente tendrá credenciales para acceder a su base de datos. Si usa las herramientas de piratería adecuadas como Backtrack , entonces este cliente malicioso puede acceder, conectarse y explotar los datos en su base de datos.

  2. Si su aplicación es para clientes de todo el mundo, entonces los clientes deben abrir y mantener una conexión a su base de datos por operación o conjunto de operaciones. Abrir una conexión de base de datos física lleva mucho tiempo, incluso cuando su cliente de PC está en una LAN junto al servidor del motor de base de datos. Ahora, imagine abrir una conexión desde un país en el otro lado del mundo, p. China o Japón o de un país de América del Sur como Brasil o Perú (donde vivo).

Por estas 2 razones que se me ocurren, es una mala idea incluso intentar conectarse a MySQL o cualquier otro motor de base de datos directamente desde el dispositivo de su teléfono.

¿Cómo resolver este problema? Utilice una arquitectura orientada a servicios en la que tendrá al menos dos aplicaciones:

  1. Aplicación de proveedor de servicios. Esta aplicación creará y publicará servicios web (preferiblemente RESTful) y puede establecer políticas para consumir los servicios web, como la autenticación y autorización de usuarios. Esta aplicación también se conectará a la base de datos y ejecutará operaciones CRUD contra ella.

  2. Aplicación de consumidor de servicios. Esta sería tu aplicación de Android (o cualquier otro móvil).

A partir de su pregunta, se está enfocando en el punto 1. Como dije en mis comentarios, puede crear una aplicación web en Java, crear un servicio RESTful allí, que se reduce a un POJO (objeto Java simple y antiguo) que tiene un método por servicio. En este método, dado que después de todo es Java simple, puede agregar otras funciones como el uso de JDBC.

Aquí hay un ejemplo inicial usando Jersey, Jackson (biblioteca JSON) y 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;
    }
}

Puede consultar otras configuraciones de la aplicación web Java en un tutorial como mkyong's o Vogella's o cualquier otro de tu agrado (es demasiada información para colocar en esta respuesta).

Tenga en cuenta que esta aplicación puede evolucionar a una aplicación en capas, y el código JDBC irá en una clase DAO, y luego el ProductRestService class accederá a la base de datos a través de esta clase DAO. Aquí hay otro ejemplo de lanzamiento:

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

Y puedes aplicar otros cambios a este proyecto así como va evolucionando.

¿Puedes decirme qué hace PHP aquí? (si desarrollo con PHP)

En lugar de escribir la aplicación del proveedor de servicios en Java (como se muestra arriba), puede hacerlo en PHP. O en Python, Ruby, C#, Scala o cualquier otro lenguaje de programación que te proporcione esta tecnología. Nuevamente, no estoy seguro de qué tipo de tutorial está leyendo, pero esto debería explicarse en alguna parte y explicar que, para los fines de ese tutorial, creará los servicios usando PHP. Si se siente más cómodo escribiendo estos servicios en Java que en PHP o cualquier otro lenguaje, no hay problema. A su aplicación de Android realmente no le importa qué tecnología se utiliza para producir los servicios web, solo le importará consumir los servicios y que los datos de ellos puedan consumirse.