【问题标题】:SQLite database downloadSQLite 数据库下载
【发布时间】:2012-04-19 10:39:32
【问题描述】:

我正在尝试下载必须在应用程序中使用的数据库 (SQLite)。在保存下载的数据(以 NSData 形式提供)之前,我想检查下载的数据是否是 SQLite 数据库。我该如何检查。

例如:

数据库的正确URLl是http://example.com/mydatabase.db

如果 URL 以某种方式输入为 http://example.com/mydatabase.bdx,但它不存在,我仍然会在 NSData 中收到一些数据。

NSData *dbfile = [NSData dataWithContentsOfURL:[NSURL URLWithString: @"http://example.com/mydatabase.db"]];

我当然可以在保存文件并尝试打开后进行检查,如果无法打开,则说明有问题。但是如果没有下载正确的数据,我想签入 NSData 而无需保存文件。

如何在不保存的情况下查看?

【问题讨论】:

  • 使用 isEqualToString 比较 url 字符串
  • 这不仅仅是关于正确或不正确的网址。因为如果有一天数据库名称发生了变化,那么您仍然会在 NSData 中收到一些东西。我想验证下载的正确文件“mydatabase.db”或 NSData 的内容(如果它是 sqlite db)。
  • 查看.. 检查文件名是否正确?应该有一些比较的基础。 eg.你想检查文件的扩展名(.db->正确或.bdx->不正确)吗?如果你能告诉我你决定文件是否正确的依据;那我可以帮你一点..!
  • 是的..如果文件扩展名是.db并且文件的大小(将被固定)那么我可以认为它是正确的,否则不是。
  • 因为我不知道如何检查 NSData 是否包含哪种类型的数据。如果我需要将 NSData 保存为文件,那么这是替代解决方案。如果它下载了正确的数据,我想检查 NSData 变量。因为 NSData 还可以下载 .html(如果 url 错误)和 .db 以防 url 正确。

标签: iphone ios


【解决方案1】:

查看the sqlite3 interface documentation,我只能找到sqlite3_open() 和朋友,它们都采用文件名,而不是数据块。

因此,如果没有提供您自己的自定义 sqlite3 库,我认为您将不得不按照您的描述保存下载的 NSData - 将其转储到临时位置,然后尝试打开它(可能使用 @987654326 @,但希望您使用的是 FMDB 或类似名称),如果失败,则断定数据无效。

【讨论】:

  • 是的,我会这样做(保存 NSData,然后打开文件),如果失败,则表示未下载正确的文件。
【解决方案2】:

下面的代码将帮助你检查扩展。

NSString *url = @"http://example.com/mydatabase.bdx";
if([url hasSuffix:@".db"])
NSData *dbfile = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多