2011-01-28 52 views
3

当我说“直接数据库连接”时,我打算使用类似JDBC的驱动程序在活动的上下文中调用和运行远程数据库查询,就像使用SQLite数据库存储本地参数一样。为什么“直接数据库连接”的范例不受Android平台欢迎?

直到我意识到我几乎无法通过互联网找到关于这种数据库连接方式的任何教程或文档,我认为,无论大多数(如果不是所有的)Android设备所面临的不稳定的Wi-Fi/3G网络连接到数据库应该这样做。

即使在android sdk中,本地也只支持本地数据库访问(a.k.a android.database.sqlite)。并且在java.sql API的说明中指出您必须提供您自己的JDBC驱动程序才能使用此API。

然后我开始意识到,如果我的意图直接连接数据库是不正确的在android领域的第一位。

我已经阅读了很多书籍,维基和论坛,包括“Stackflow”中提供的许多答案,在我看来,很多人都在专注于完成某些事情,讨论过程以“我如何设计Restful Web服务为我的Android设备“,但是我需要的是彻底的理解!我还需要来自原始android开发人员的权威引用。

有人可以提供我对此事的相当数量的见解吗?!很多感谢你提前!

回答

9

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

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

  2. 认证:你想在公共网络上的用户进行身份验证:

    A.每个用户必须说你的服务器时,它自己的凭证(以某种形式)。有一个用户名/密码出现在你的应用程序中会引起麻烦。

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

  3. 标准协议:如果您想确保您的应用在所有网络上运行(特别是在锁定的公司网络上),则需要使用HTTP/HTTPS。这是唯一可以在任何地方运行(几乎)的协议。

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

+0

jtds(http://hub.webring.org/hub/java)怎么样?我在其他一些帖子中发现了这个驱动程序,声明这个驱动程序可以被android设备用来启用JDBC连接。如果Android上没有JDBC驱动程序,为什么我们首先需要这个java.spl API呢?而且,你的意思是说,为了从Android设备访问数据库,始终需要在服务器上编写Web服务? – lixiang 2011-01-30 07:30:28

3

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

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

+0

这正是我的意思,我以为我没有清楚地表达我的论点。不稳定的Wi-Fi/3G网络是不可靠的高延迟移动网络,因此JDBC当然不适合这种网络。您能否推荐一些简要介绍JDBC的资源? – lixiang 2011-01-30 07:17:45

相关问题