Zasadniczo:możesz połączyć się ze swoim serwerem MySQL (lub czymkolwiek, czego używasz), ale nie powinieneś zrób to bezpośrednio z aplikacji na Androida.
Powody:
-
Aplikacje na Androida można dekompilować, a klient będzie miał poświadczenia dostępu do Twojej bazy danych. Jeśli używasz odpowiednich narzędzi hakerskich, takich jak Backtrack , ten złośliwy klient może uzyskać dostęp, połączyć się i wykorzystać dane w Twojej bazie danych.
-
Jeśli aplikacja jest przeznaczona dla klientów na całym świecie, klienci powinni otwierać i utrzymywać połączenie z bazą danych na operację lub zestaw operacji. Otwarcie fizycznego połączenia z bazą danych zajmuje dużo czasu, nawet jeśli klient PC znajduje się w sieci LAN obok serwera silnika bazy danych. A teraz wyobraź sobie otwarcie połączenia z kraju na drugim końcu świata, np. Chiny lub Japonia lub z kraju w Ameryce Południowej, takiego jak Brazylia lub Peru (gdzie mieszkam).
Z tych dwóch powodów, które mogę wymyślić, jest to zły pomysł nawet próba połączenia się z MySQL lub innym silnikiem bazy danych bezpośrednio z urządzenia telefonicznego.
Jak rozwiązać ten problem? Użyj architektury zorientowanej na usługi, w której będziesz mieć co najmniej dwie aplikacje:
-
Aplikacja dostawcy usług. Ta aplikacja będzie tworzyć i publikować usługi internetowe (najlepiej RESTful) i może ustanawiać zasady korzystania z usług internetowych, takie jak uwierzytelnianie i autoryzacja użytkowników. Ta aplikacja połączy się również z bazą danych i wykona na niej operacje CRUD.
-
Aplikacja konsumenta usługi. To byłaby Twoja aplikacja na Androida (lub dowolna inna mobilna).
Od twojego pytania skupiasz się na punkcie 1. Jak wspomniałem w moich komentarzach, możesz stworzyć aplikację internetową w Javie, stworzyć tam usługę RESTful, która sprowadza się do POJO (zwykły stary obiekt java), który ma metodę na usługę. W tej metodzie, ponieważ jest to w końcu czysta Java, możesz dodać inne funkcje, takie jak użycie JDBC.
Oto przykład uruchomienia z użyciem Jersey, Jackson (biblioteka JSON) i 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;
}
}
Dalsze konfiguracje aplikacji internetowej Java można sprawdzić w samouczku, takim jak mkyong lub Vogella lub dowolny inny podobny (za dużo informacji, aby umieścić je w tej odpowiedzi).
Zauważ, że wtedy ta aplikacja może ewoluować w aplikację warstwową, a kod JDBC trafi do klasy DAO, a następnie do ProductRestService
class uzyska dostęp do bazy danych za pośrednictwem tej klasy DAO. Oto kolejny przykład rozpoczęcia:
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();
}
}
I możesz zastosować inne zmiany do tego projektu, jak również się rozwija.
Czy możesz mi powiedzieć, co robi tutaj PHP? (jeśli programuję w PHP)
Zamiast pisać aplikację dostawcy usług w Javie (jak pokazano powyżej), możesz to zrobić w PHP. Lub w Pythonie, Ruby, C#, Scali lub dowolnym innym języku programowania, który zapewnia Ci tę technologię. Ponownie, nie jestem pewien, jaki rodzaj samouczka czytasz, ale należy to gdzieś wyjaśnić i wyjaśnić, że na potrzeby tego samouczka będziesz tworzyć usługi za pomocą PHP. Jeśli czujesz się bardziej komfortowo pisząc te usługi w Javie niż w PHP lub jakimkolwiek innym języku, nie ma problemu. Twoja aplikacja na Androida tak naprawdę nie dba o to, która technologia jest używana do tworzenia usług internetowych, zależy jej tylko na korzystaniu z usług io tym, że dane z nich mogą być wykorzystywane.