2012-04-19 96 views
1

我想下载必须在应用程序中使用的数据库(SQLite)。在保存下载的数据(它是NSData)之前,我想检查下载的数据是否是SQLite数据库。我如何检查。SQLite数据库下载

例如:

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

如果莫名其妙网址的类型是http://example.com/mydatabase.bdx,它不存在,我还是收到NSData的一些数据。

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

我当然可以检查保存文件后试图打开,如果它打不开它有一些问题。但是我想检查NSData,而不需要保存文件,如果没有正确的数据下载。

如何在不保存的情况下进行检查?

+1

使用isEqualToString比较url-strings – 2012-04-19 10:45:43

+0

它不仅仅是正确或不正确的url。因为如果有一天数据库名称改变了,那么你仍然在NSData中收到一些东西。我想验证正确的文件下载'mydatabase.db'或NSData的内容,如果它是一个SQLite数据库。 – Anand 2012-04-19 11:14:32

+0

请参阅..以检查它是否正确的文件名?应该有一些比较的基础。 eg.do你想检查文件的扩展名(.db->正确或.bdx->不正确)?如果你能告诉我你是凭什么决定文件是否正确;那么我可以帮你一下..! – 2012-04-19 11:18:45

回答

1

来看,所有我能找到的是sqlite3_open()和朋友,这些都需要一个文件名,而不是数据块。

因此,短期出货自己的自定义的sqlite3库的,我想你将不得不保存下载NSData你描述 - 它转储到一个临时位置,然后尝试用sqlite3_open()打开它(也许,但希望你使用的是FMDB或类似的),如果失败,则认为数据无效。

+0

是的,我要(保存NSData,然后打开文件),如果失败,这意味着正确的文件没有下载。 – Anand 2012-04-19 12:29:24

1

下面的代码将帮助你检查扩展名。通过the sqlite3 interface documentation

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