I grund och botten:du kan ansluta till din MySQL-server (eller vad du än använder), men du bör inte gör detta direkt från din Android-applikation.
Skäl:
-
Android-applikationer kan dekompileras, och klienten kommer att ha autentiseringsuppgifter för att komma åt din databas. Om du använder rätt hackningsverktyg som Backtrack , då kan den här skadliga klienten komma åt, ansluta och utnyttja data i din databas.
-
Om din applikation är för kunder över hela världen, bör klienterna öppna och upprätthålla en anslutning till din databas per operation eller uppsättning operationer. Att öppna en fysisk databasanslutning tar mycket tid, även när din PC-klient är i ett LAN bredvid databasmotorservern. Tänk dig nu att öppna en förbindelse från ett land på andra sidan jorden, t.ex. Kina eller Japan eller från ett land i Sydamerika som Brasilien eller Peru (där jag bor).
Av dessa två anledningar jag kan komma på är det en dålig idé att ens försöka ansluta till MySQL eller någon annan databasmotor direkt från din telefonenhet.
Hur löser man detta problem? Använd en tjänsteorienterad arkitektur där du kommer att ha minst två applikationer:
-
Ansökan om tjänsteleverantör. Denna applikation kommer att skapa och publicera webbtjänster (helst RESTful) och kan upprätta policyer för att konsumera webbtjänsterna som användarautentisering och auktorisering. Denna applikation kommer också att ansluta till databasen och utföra CRUD-operationer mot den.
-
Tjänstekonsumentapplikation. Det här skulle vara din Android (eller någon annan mobil) applikation.
Från din fråga fokuserar du på punkt 1. Som jag har sagt i mina kommentarer kan du skapa en webbapplikation i Java, skapa en RESTful-tjänst där, vilket kokar ner till ett POJO (vanligt gammalt java-objekt) som har en metod per tjänst. I den här metoden, eftersom det trots allt är vanlig Java, kan du lägga till andra funktioner som JDBC-användning.
Här är ett kickoff-exempel med Jersey, Jackson (JSON-bibliotek) och 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;
}
}
Du kan söka efter ytterligare konfigurationer av Java-webbapplikationen i en handledning som mkyongs eller Vogella's eller något annat du gillar (det är för mycket information att placera i det här svaret).
Observera att den här applikationen då kan utvecklas till en applikation med lager, och JDBC-koden kommer att gå i en DAO-klass, och sedan ProductRestService
klass kommer att komma åt databasen genom denna DAO-klass. Här är ett annat kickoff-exempel:
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();
}
}
Och du kan tillämpa andra ändringar på det här projektet så väl som det är under utveckling.
Kan du säga mig vad PHP gör här? (om jag utvecklar med PHP)
Istället för att skriva tjänsteleverantörsapplikationen i Java (som visas ovan), kan du göra det i PHP. Eller i Python, Ruby, C#, Scala eller något annat programmeringsspråk som tillhandahåller denna teknik till dig. Återigen, jag är inte säker på vilken typ av handledning du läser, men detta bör förklaras någonstans och förklara att du för syftet med den självstudien kommer att skapa tjänsterna med PHP. Om du känner dig mer bekväm med att skriva dessa tjänster i Java snarare än i PHP eller något annat språk, är det inga problem. Din Android-app bryr sig inte riktigt vilken teknik som används för att producera webbtjänsterna, den kommer bara att bry sig om att konsumera tjänsterna och att data från dem kan konsumeras.