基本上:您可以连接到您的 MySQL(或任何您使用的)服务器,但您不应该直接从您的 Android 应用程序执行此操作。
原因:
Android 应用程序可以被反编译,并且客户端将拥有访问您的数据库的凭据。如果使用正确的黑客工具,例如Backtrack,那么这个恶意客户端可以访问、连接和利用您数据库中的数据。
如果您的应用程序面向世界各地的客户端,则客户端应在每个操作或一组操作中打开并维护与您的数据库的连接。打开物理数据库连接需要很长时间,即使您的 pc 客户端位于数据库引擎服务器旁边的 LAN 中。现在,想象一下从世界另一端的国家打开连接,例如中国或日本,或来自巴西或秘鲁等南美洲国家(我居住的地方)。
出于我能想到的这两个原因,即使尝试直接从您的手机设备连接到 MySQL 或任何其他数据库引擎也是一个坏主意。
如何解决这个问题?使用面向服务的架构,您将至少拥有两个应用程序:
服务提供者应用程序。此应用程序将创建和发布 Web 服务(最好是 RESTful),并可以建立策略来使用 Web 服务,如用户身份验证和授权。此应用程序还将连接到数据库并对其执行 CRUD 操作。
服务消费者应用程序。这将是您的 Android(或任何其他移动)应用程序。
从您的问题来看,您关注的是第 1 点。正如我在我的 cmets 中所说,您可以在 Java 中创建一个 Web 应用程序,在那里创建一个 RESTful 服务,归结为 POJO(普通的旧 java对象),每个服务都有一个方法。在这种方法中,由于它毕竟是纯 Java,因此您可以添加其他功能,例如 JDBC 使用。
这是一个使用 Jersey、Jackson(JSON 库)和 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;
}
}
您可以在 mkyong's 或 Vogella's 或任何其他类似的教程中检查 Java Web 应用程序的进一步配置(在此答案中提供的信息太多)。
注意,那么这个应用程序可以演变成一个分层的应用程序,JDBC代码会进入一个DAO类,然后ProductRestService类会通过这个DAO类访问数据库。这是另一个启动示例:
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();
}
}
您可以将其他更改应用于此项目以及正在发展的项目。
你能告诉我 PHP 在这里做什么吗? (如果我用 PHP 开发)
您可以使用 PHP 来编写服务提供程序应用程序,而不是用 Java 编写(如上所示)。或者使用 Python、Ruby、C#、Scala 或任何其他为您提供此技术的编程语言。同样,我不确定您正在阅读什么样的教程,但这应该在某处进行解释,并说明出于该教程的目的,您将使用 PHP 创建服务。如果您觉得用 Java 而不是 PHP 或任何其他语言编写这些服务更舒服,那没有问题。您的 android 应用并不真正关心用于生成 Web 服务的技术,它只关心使用服务以及是否可以使用来自服务的数据。