如何查询外部SQL数据库 - iPhone应用程序

6

我之前在iPhone应用程序中使用过sqlite3,但是如何查询我网站上的外部SQL数据库呢?

4个回答

9

您的应用程序不执行实际查询。正确的方法是为您的网站设置一个API,使得网站执行查询并将适当的数据返回给您的应用程序。

您的API通常由多个端点组成,这些端点返回为您的应用程序格式化的数据。例如,您可以创建一个PHP或Python页面,查询数据库以获取给定用户的所有帖子,并以JSON或XML编码的数组形式返回它们。(数据格式完全由您决定。iOS有可用于解析这两种格式的框架。)

例如,假设您在服务器上有一个PHP页面,该页面返回当前星期几。您的PHP代码将类似于以下内容:

<?php
  echo date("l");
?>

让我们假设您已将此保存为http://example.com/dayoftheweek.php
我建议使用ASIHTTPRequest框架从应用程序内部执行HTTP请求。假设您已经在项目中设置好了ASIHTTPRequest,那么请求可能如下所示:
NSURL *url = [NSURL URLWithString:@"http://example.com/dayoftheweek.php"]
ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url];
[request setDelegate:self];

现在,您需要实现ASIHTTPRequest委托方法来解析返回的数据。处理已完成请求的方法如下所示:

- (void)requestFinished:(ASIHTTPRequest *)request{
   //Here you would store the returned data and/or parse it
}

为了实现API,你的PHP页面会更加复杂。你需要构建一个更复杂的请求,传递变量等信息,而PHP页面则会像普通的Web服务一样返回所请求的数据。


但是什么类型的HTTP请求?我应该如何创建API?这需要使用PHP吗?你能给一个实现的例子吗? - StanLe
我认为他并不需要一个重复的答案。 - ySgPjx
@StanLe - 我已更新为基本示例。 @pt2ph8 - 我也不这么认为,这就是为什么我更新了我的答案。;-) - Moshe
非常好的例子。我真的很感激。唯一让我不确定的是:在PHP中,如何“返回”数据?我只打印过数据到屏幕上。 - StanLe
是的,无论什么内容被打印到屏幕上,都会作为响应的一部分传递给应用程序。 - Moshe
显示剩余2条评论

0

我想你指的是MySQL。通常情况下,从外部访问MySQL数据库是被禁止的,这也是有充分理由的。你可能需要编写一个API来访问你的数据库。你的iPhone应用程序将与此API通信以插入和检索数据。


那么是什么类型的API?我需要编写像PHP脚本之类的东西吗? - StanLe
是的。你可以做的最简单的事情就是编写一个PHP脚本,根据传递给它的参数返回JSON或XML格式的数据。然后,你可以使用ASIHTTPRequest和众多的JSON和XML库之一(我推荐YAJL用于JSON和GData用于XML)从你的应用程序中解析这些数据,并对其进行处理。 - ySgPjx
你可以使用网络服务。比如说,你想从服务器数据库获取某个用户的ID。为了实现这一点,可以使用一个网络服务API - (NSNumber*)IDForUserWithName:(NSString*)username。这个调用会发送到你的服务器,服务器会从数据库中内部获取传入的用户名对应的ID。 - Subhash
@subhash 我认为我能够弄清楚如何制作一个接收查询或者向我的MySQL数据库发出查询的php文件。但是我的担忧是:我该如何将这些结果封装起来并在Objective-C中读取它们。Objective-C方面会是什么样子呢?我以前做过SQL查询,但只是将它们打印到计算机屏幕上... - StanLe
@StanLe,你是如何从你的应用程序与服务器进行通信的?你是发送简单的HTTP请求还是基于SOAP的Web服务?如果你正在使用简单的HTTP请求,那么你得到的响应格式是什么?它是XML格式吗? - Subhash
我对向服务器发送ping请求的唯一操作是使用NSData dataWithContentsOfURL从服务器上获取文本文件。我从未做过比那更复杂的事情。你有什么建议?我应该如何获取MySQL请求的结果? - StanLe

0

@StanLe:你不能直接在本地应用程序中使用SQL Server或mySQL。但是,你可以通过以下方式将你的应用程序与外部SQL数据库进行通信。

  1. 使用PHP、C#或任何提供XML文件结果的工具创建XML API。
  2. 在Xcode中使用一些解析器(NSXMLParser),它可以读取XML页面的标签。

这里是示例

这里是示例代码

另一个非常简单的示例

如果仍有疑问,请回复我。


我对PHP有一些了解,并且以前在PHP中进行过SQL查询。唯一让我担心的是,我已经将查询结果打印到控制台(计算机屏幕)上。我该如何将这些结果封装起来并在Objective-C中读取? - StanLe
你能告诉我一些细节吗,比如你正在使用什么数据库和平台,以及你想在本地应用程序中看到什么样的结果? - Xorsat
很好的链接。我唯一困惑的是如何从Objective-C运行一个位于我的服务器上的php文件,例如www.mysite.com/myfile.php,并获得返回结果。 我想能够运行一个带有特定输入(例如名称)的php文件,该输入将用于查询数据库。然后PHP将从我的MySQL数据库返回一行数据。接着,我的Objective-C将获取该结果。 - StanLe

0

与任何外部数据库通信的方法是通过Web服务(我们在这里称之为API)。您向服务器发出请求,通常是对服务器的函数调用,并且服务器会回复您所请求的数据。

您可以查看此链接。至于PHP和其他相关术语,则需要一些努力并搜索一些代码。此链接也可能有所帮助。通常为iPhone编写的Web服务使用XML / JSON。JSON / XML解析器可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接