我们可以使用JDBC在Android中连接远程MySQL数据库吗?

xyz:

我正在开发需要远程数据库连接的客户端服务器应用程序。

我知道网络上的教程以及越来越多的人正在使用PHP与MySQL进行交互。但是,我不太擅长PHP,以前的经验是使用Core Java,Swing和JDBC。

如果可以在Android应用程序中使用JAVA JDBC API连接远程MySQL数据库,谁能指导我?

路易吉·门多萨(Luiggi Mendoza):

基本上:您可以连接到MySQL(或您使用的任何服务器)服务器,但不应直接从Android应用程序执行此操作。

原因:

  1. 可以对Android应用程序进行反编译,并且客户端将具有访问数据库的凭据。如果使用正确的黑客工具(如Backtrack),则此恶意客户端可以访问,连接和利用数据库中的数据。

  2. 如果您的应用程序适用于世界各地的客户端,则客户端应按每个操作或一组操作打开并维护与数据库的连接。即使您的PC客户端位于数据库引擎服务器旁边的LAN中,打开物理数据库连接也要花费大量时间。现在,想象一下从世界另一端的一个国家(例如中国或日本)或南美国家(例如巴西或秘鲁)(我居住的国家)建立连接。

由于上述两个原因,即使尝试直接从您的电话设备连接到MySQL或任何其他数据库引擎,这也是一个坏主意。

如何解决这个问题呢?使用面向服务的体系结构,其中至少要有两个应用程序:

  1. 服务提供商应用程序。该应用程序将创建和发布Web服务(最好是RESTful),并可以建立使用Web服务的策略,例如用户身份验证和授权。该应用程序还将连接到数据库并对数据库执行CRUD操作。

  2. 服务使用者应用程序。这将是您的Android(或任何其他移动设备)应用程序。

从您的问题出发,您将重点放在第1点上。正如我在评论中所说,您可以使用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;
    }
}

您可以在mkyongVogella或其他类似的教程中检查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开发)

不用用Java编写服务提供程序应用程序(如上所示),而可以用PHP进行。或者使用Python,Ruby,C#,Scala或向您提供此技术的任何其他编程语言。同样,我不确定您正在阅读哪种类型的教程,但是应该在某处进行解释,并说明出于该教程的目的,您将使用PHP创建服务。如果您觉得用Java而不是PHP或任何其他语言编写这些服务感到更舒服,那没有问题。您的android应用并不真正在乎使用哪种技术来生产Web服务,它只会在乎使用服务以及可以使用其中的数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

除了MongoDB,我们可以使用其他数据库吗?

我们可以在Codeigniter中连接多个数据库吗?

我们可以仅在Java中使用odbc来连接数据库吗?

我们可以使用flyway在多个数据库上并行部署sql代码吗

我们可以将数据源连接到Power Bi中的多个本地数据库吗?

打开连接的Excel文件时,我们可以修改数据库吗?

我们可以将 Firebase 数据库与 Webflow 连接吗?

我们可以使用WebView在UWP应用中显示远程Web内容吗?

我们可以直接在MySQL数据库的值中应用计算公式吗?

我们可以使用 Microsoft SEAL / PySEAL 库对加密数据进行除法运算吗

我们可以在PostgreSQL中更改单个表或数据库的数据目录吗

我们可以使用mysql中的字符串函数从单个查询中提取多个数据吗?

我们可以在Django的models.py中定义数据库名称吗?

我们可以从数据库中删除wp_woocommerce_sessions吗?

我们可以在核心PHP中使用Firebase Realtime数据库吗?

我们可以使用 Azure SSIS IR 运行时将数据从本地移动到 Azure Sql 数据库吗?

您可以使用JDBC来仅连接实例而不指定数据库吗?

使用领班,一旦数据库启动,我们可以运行数据库迁移吗?

我可以使用SqlBulkCopy将相同的主键更新到远程数据库吗?

我们可以使用执行 Sql 任务截断 Excel 工作表中的数据吗?

我们可以使用 FirebaseListAdapter 在 android 中填充 TabLayout 吗?

除了sql,我们可以在android中使用哪个数据库?

我可以使用一个用户来连接MongoDB中的不同数据库吗?

我们可以使用Powershell在azure VM上远程安装Java吗?

我们可以使用Spyder从Docker容器远程运行和调试Python代码吗

我们是否可以使用其他唯一约束作为数据库中的主键,例如电话号码或国家/地区ID

我可以使用mysql Dockerfile构建本地构建的mysql数据库吗?

我们可以添加外部登录的授权范围并将结果保存到ServiceStack中的数据库中吗?

我们可以使用节点 SDK 在 hypeledger 结构中只连接一次网关吗