Basicamente:você pode se conectar ao seu servidor MySQL (ou o que você usar), mas você não deve faça isso diretamente do seu aplicativo Android.
Razões:
-
Aplicativos Android podem ser descompilados e o cliente terá credenciais para acessar seu banco de dados. Se estiver usando as ferramentas de hacking corretas, como Backtrack , esse cliente malicioso pode acessar, conectar e explorar os dados em seu banco de dados.
-
Se seu aplicativo for para clientes em todo o mundo, os clientes deverão abrir e manter uma conexão com seu banco de dados por operação ou conjunto de operações. Abrir uma conexão de banco de dados física leva muito tempo, mesmo quando seu cliente de PC está em uma LAN próxima ao servidor do mecanismo de banco de dados. Agora, imagine abrir uma conexão de um país do outro lado do mundo, por exemplo. China ou Japão ou de um país da América do Sul como Brasil ou Peru (onde moro).
Por essas 2 razões que posso sugerir, é uma má ideia tentar se conectar ao MySQL ou a qualquer outro mecanismo de banco de dados diretamente do seu dispositivo de telefone.
Como resolver este problema? Use uma arquitetura orientada a serviços onde você terá pelo menos dois aplicativos:
-
Aplicativo de provedor de serviços. Esta aplicação irá criar e publicar web services (de preferência RESTful) e poderá estabelecer políticas para consumir os web services como autenticação e autorização de usuários. Esse aplicativo também se conectará ao banco de dados e executará operações CRUD nele.
-
Aplicativo de consumidor de serviço. Este seria seu aplicativo Android (ou qualquer outro celular).
Da sua pergunta, você está focando no ponto 1. Como eu disse nos meus comentários, você pode criar uma aplicação Web em Java, criar um serviço RESTful lá, que se resume a um POJO (plain old java object) que tem um método por serviço. Nesse método, já que é Java simples, você pode adicionar outras funcionalidades, como o uso de JDBC.
Aqui está um exemplo inicial usando Jersey, Jackson (biblioteca 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;
}
}
Você pode verificar outras configurações do aplicativo da Web Java em um tutorial como mkyong's ou Vogella's ou qualquer outro do seu gosto (é muita informação para colocar nesta resposta).
Observe que esse aplicativo pode evoluir para um aplicativo em camadas, e o código JDBC irá para uma classe DAO e, em seguida, o
ProductRestService
classe acessará o banco de dados por meio dessa classe DAO. Aqui está outro exemplo de pontapé inicial: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 você pode aplicar outras mudanças nesse projeto assim como está evoluindo.
Você pode me dizer o que o PHP faz aqui? (se eu desenvolver com PHP)
Em vez de escrever o aplicativo do provedor de serviços em Java (como mostrado acima), você pode fazê-lo em PHP. Ou em Python, Ruby, C#, Scala ou qualquer outra linguagem de programação que forneça essa tecnologia para você. Novamente, não tenho certeza de que tipo de tutorial você está lendo, mas isso deve ser explicado em algum lugar e explicar que, para os propósitos desse tutorial, você criará os serviços usando PHP. Se você se sentir mais confortável escrevendo esses serviços em Java em vez de em PHP ou qualquer outra linguagem, não há problema. Seu aplicativo Android realmente não se importa com qual tecnologia é usada para produzir os serviços da Web, ele se preocupa apenas em consumir os serviços e que os dados deles possam ser consumidos.