我是一个来自PHP背景的android新手。在PHP中基本上就是这样所有的数据库连接都发生在PHP代码(服务器端)中,然后在HTML代码(客户端)中转换。
从我所看到的android数据库连接,我们写一个服务在php使用mysql。在Android java类中,我们进行服务调用(我认为总是aysnc),然后当结果出现时,我们更新UI(有点像Ajax架构和gwt)。
上面的系统对我来说很有意义。我在某个地方读到,尽管在android上使用JDBC是不实用的,但它仍然可以使用。举例来说,我们希望通过JDBC进行数据库调用。在普通的web应用程序中,我会把它放在servlet中。但在安卓系统中,我们没有这个功能。我们只有UI小部件代码。
所以只是为了理解体系结构,有人能给我解释一下我在代码中应该在哪里进行JDBC调用吗?或者更广泛地说,它的架构与传统的客户端/服务器端不同吗?
Like Php:
您过去在PHP
中所做的事情的简要回顾如下:
- 通过
PHP
连接MySQL
服务器 - 使用
PHP
函数查询服务器 -
MySQL
服务器接收,解析查询并将结果发回 -
PHP
解析响应,然后您显示(或做任何事情)它
PHP
已内置支持MySQL库。
SQLite
将其数据存储在设备本身而不是服务器上。
对于数据库操作,使用SQLite
遵循相同的过程:
- 使用
- 向数据库 发送查询
-
SQLite
引擎接收、解析查询并将结果发回 -
Android
活动接收结果,然后你可以用它做任何你想做的事情
Android
(Java)活动连接到SQLite
数据库但是,问题来了
这只适用于想要在本地存储数据的情况,例如保存用户的分数。
假设你想在自己制作的游戏中加入排行榜。那么你就不能这样做了,因为数据是本地存储在所有设备上的。为此,我们需要将所有用户数据存储在一个/相同的位置。
解决方案(如PHP中的~)
我们将把我们的数据保存在一个在线服务器上,并将在需要时检索它。我们可以连接到服务器上的任何数据库引擎,但MySQL
比其他引擎快。因此,我们将使用MySQL
作为我们的数据库服务器,并使用PHP
web服务连接到它。
但是,它是如何做到的呢?步骤如下:
- 创建web服务
-
PHP
脚本的集合,可以读写数据库 - 为了安全起见,插入
OAuth
之类的东西来执行交易并加密传输的数据(最好在框架中编写这种类型的服务)
-
- 从
Android
活动发送READ或WRITE请求到web服务 - Web服务接收、授权、解析请求
- Web服务然后将适当的请求发送到
MySQL
服务器 -
MySQL
服务器接收、解析查询并将结果发送回web服务 - Web服务接收、解析响应并将结果发送回
Android
活动 -
Android
活动接收数据,然后你可以玩它:)
你可能在Android本身没有使用JSON等私有数据库。就像在PHP中使用MySQL一样。
你可能会发现很多关于SQLLite的教程。但是,这里是谷歌Android页面的官方文档:http://developer.android.com/reference/android/database/sqlite/package-summary.html
简短的回答是你不能在android中使用JDBC。原因是JDBC对于移动设备来说太重了。但是您可以使用内置的SqLite支持与本地SqLite数据库一起工作。与JDBC MySql驱动程序相比,它有一些限制,但它应该符合您的需求。使用SqLite很简单:
- 连接数据库
- 发送查询
- 获取数据
- 处理数据
你唯一要记住的是你不应该在主线程中使用SqLite。你可以用Thread创建自己的线程,但最简单的解决方案是使用AsyncThread。
如果你想调用远程MySql数据库,那么你的方法就有点复杂了
- 编写服务器端代码,处理来自android的请求并将其发送到数据库(例如:使用JSON)
- 从android设备向远程服务器发送请求
- 接收服务器应答
- 处理
就像上面的SqLite方法一样,你应该在后台线程中完成它,以免阻塞UI。
-如果需要,您可以使用本地数据库(使用SQLite)
android中的服务器/客户端与任何其他应用程序相似:你需要一个WebService处理程序,通常(最佳实践)是AsyncTask。
解决方案:很好很简单……
创建一个.php为您完成这项工作,将结果解析为json工作流。使用asynctask获取并解析结果。如果需要,将数据添加到数据库中。你终于可以在onPostExecute方法中显示一个漂亮的UI了。