3

当我说“直接数据库连接”时,我的意思是使用类似 JDBC 的驱动程序在活动的上下文中调用和运行远程数据库查询,就像使用 SQLite 数据库存储本地参数一样。

直到我意识到我在互联网上几乎找不到任何关于这种数据库连接方式的教程或文档时,我想,不管大多数(如果不是所有)Android 设备都忍受不稳定的 Wi-Fi/3G 网络,连接到数据库应该这样做。

android.database.sqlite即使在 Android SDK 中,本质上也只支持本地数据库访问(aka )。并且在java.sql API的描述中指出,您必须提供自己的 JDBC 驱动程序才能使用此 API。

然后我开始意识到我直接连接数据库的意图是否首先在Android领域是错误的。

我阅读了很多书籍、wiki 和论坛,包括 Stack Overflow 上提供的大量答案。在我看来,很多人都在专注于完成某件事,并且过去的讨论通常以“如何为我的 Android 设备设计 RESTful Web 服务?”开始。但是,我需要彻底了解!而且我还需要原始 Android 开发者的权威引用。

4

2 回答 2

10

几个原因(但不是几乎所有原因):

  1. 不存在:Android 上没有(受支持的)JDBC 驱动程序。

  2. 身份验证:您希望对公共网络上的用户进行身份验证:

    A. 在与您的服务器交谈时,每个用户都必须拥有自己的凭据(以某种形式)。将一个用户名/密码放入您的应用程序是自找麻烦。

    B. 您不希望您的数据库提供身份验证。为此,您需要一个单独的身份验证层。

  3. 标准协议:如果您想确保您的应用程序在所有网络上运行(尤其是在锁定的公司网络上),您需要使用 HTTP/HTTPS。它是唯一(几乎)在任何地方都有效的协议。

  4. 业务逻辑分离:如果您支持不同的设备平台(Android、iPhone 等),那么将所有业务逻辑都放在服务器上是明智的。您应该在服务器上执行此操作,而不是调用 JDBC 然后在设备上执行业务逻辑。这样您将符合DRY(不要重复自己),并且单元测试也会更容易。

于 2011-01-28T09:40:31.963 回答
4

我认为,不管大多数(如果不是所有)android 设备都支持不稳定的 Wi-Fi/3G 网络,连接到数据库都应该这样做。

欢迎您发表意见。我强烈反对你。JDBC 和类似的协议是为可靠的、低延迟的 LAN 而设计的,而不是不可靠的、高延迟的移动网络。此外,您需要您的数据库在公共 Internet 上可见,这意味着它会受到黑客的攻击。

于 2011-01-28T08:42:18.937 回答