Grundlæggende:du kan oprette forbindelse til din MySQL-server (eller hvad du nu bruger), men du bør ikke gør dette direkte fra din Android-applikation.
Årsager:
-
Android-applikationer kan dekompileres, og klienten vil have legitimationsoplysninger for at få adgang til din database. Hvis du bruger de rigtige hackingværktøjer som Backtrack , så kan denne ondsindede klient få adgang til, forbinde og udnytte dataene i din database.
-
Hvis din applikation er til klienter over hele verden, så skal klienterne åbne og vedligeholde en forbindelse til din database pr. operation eller sæt af operationer. Det tager meget tid at åbne en fysisk databaseforbindelse, selv når din pc-klient er i et LAN ved siden af databasemotorserveren. Forestil dig nu at åbne en forbindelse fra et land i den anden side af verden, f.eks. Kina eller Japan eller fra et land i Sydamerika som Brasilien eller Peru (hvor jeg bor).
Af disse 2 grunde, jeg kan finde på, er det en dårlig idé selv at prøve at oprette forbindelse til MySQL eller enhver anden databasemotor direkte fra din telefonenhed.
Hvordan løser man dette problem? Brug en serviceorienteret arkitektur, hvor du vil have mindst to applikationer:
-
Tjenesteudbyderens ansøgning. Denne applikation vil oprette og udgive webtjenester (helst RESTful) og kan etablere politikker for at forbruge webtjenesterne, såsom brugergodkendelse og -autorisation. Denne applikation vil også oprette forbindelse til databasen og udføre CRUD-operationer mod den.
-
Tjenesteforbrugerapplikation. Dette ville være din Android (eller enhver anden mobil) applikation.
Ud fra dit spørgsmål fokuserer du på punkt 1. Som jeg har sagt i mine kommentarer, kan du oprette en webapplikation i Java, oprette en RESTful service der, som koger ned til et POJO (almindeligt gammelt java-objekt), der har en metode pr. tjeneste. I denne metode, da det trods alt er almindelig Java, kan du tilføje andre funktioner som JDBC-brug.
Her er et kickoff-eksempel ved hjælp af Jersey, Jackson (JSON-bibliotek) og 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 tjekke for yderligere konfigurationer af Java-webapplikationen i et selvstudie som mkyong's eller Vogella's eller noget andet, du kan lide (det er for meget info at placere i dette svar).
Bemærk, at så kan denne applikation udvikle sig til en lagdelt applikation, og JDBC-koden vil gå i en DAO-klasse, og derefter ProductRestService
klasse vil få adgang til databasen gennem denne DAO-klasse. Her er endnu et kickoff-eksempel:
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();
}
}
Og du kan anvende andre ændringer på dette projekt såvel som er under udvikling.
Kan du fortælle mig, hvad PHP gør her? (hvis jeg udvikler med PHP)
I stedet for at skrive Service Provider-applikationen i Java (som vist ovenfor), kan du gøre det i PHP. Eller i Python, Ruby, C#, Scala eller et hvilket som helst andet programmeringssprog, der giver dig denne teknologi. Igen, jeg er ikke sikker på, hvilken slags tutorial du læser, men dette bør forklares et sted og forklare, at du til formålet med den tutorial vil oprette tjenesterne ved hjælp af PHP. Hvis du føler dig mere tryg ved at skrive disse tjenester i Java i stedet for i PHP eller et andet sprog, er der ikke noget problem. Din Android-app er ligeglad med, hvilken teknologi der bruges til at producere webtjenesterne, den vil kun bekymre sig om at forbruge tjenesterne, og at dataene fra dem kan forbruges.