ios - iOS 应用程序中的 SQlite 数据库在下载后被加密
<p><p>我想创建一个简单的 iOS 应用。这个应用程序从 URL 下载一个简单的 SQlite 数据库。
但是当数据库下载并存储在 Documents 文件夹中时,我无法通过一些 SQLite 管理器打开它,因为它说它是加密的,尽管原始数据库不是。</p>
<p>读取这个数据库的代码也不能正常工作,我认为是因为数据库在 Documents 文件夹中加密。这是我到目前为止所得到的。</p>
<pre><code>-(void) downloadDatabase {
NSString *stringURL = @"https://www.dropbox.com/s/cq8y6x29e6ku65r/database.sqlite";
NSURL*url = ;
NSData *urlData = ;
if ( urlData != nil )
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString*documentsDirectory = ;
NSString*filePath = ;
;
NSLog(@"Stahujem databazu do: %@", filePath);
}
}
</code></pre>
<p>这就是我在应用程序中下载数据库的方式。</p>
<pre><code>// Get the documents directory
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = dirPaths;
// Build the path to the database file
NSString *databasePath = [
initWithString: [docsDir stringByAppendingPathComponent:
@"database.sqlite"]];
const char *dbpath = ;
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &myDatabase) == SQLITE_OK)
{
NSString *querySQL = @"SELECT * FROM CHAMPIONS";
const char *query_stmt = ;
if (sqlite3_prepare_v2(myDatabase, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSString *text = [
initWithUTF8String:
(const char *) sqlite3_column_text(
statement, 1)];
;
statusOfGettingDataFromDB = @"Found!";
NSLog(@"count: %d", );
}
sqlite3_finalize(statement);
}
sqlite3_close(myDatabase);
}
</code></pre>
<p>通过这段代码,我试图从数据库中获取一些数据。但是在 <code>sqlite3_prepare_v2</code> 之后它会直接跳到最后。</p>
<p>你能告诉我一些我做错了什么吗?并建议我如何解决这个问题?
我真的很感激。谢谢。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您正在下载的 URL 当前返回的是 HTML 页面,而不是 SQLite 文件。 </p>
<p>因此,您写入文档目录的 <code>.sqlite</code> 文件无效。如果您修改 URL,您的代码将正常工作</p>
<p>尝试使用此 URL,这是单击 Dropbox 页面上的“下载”按钮时点击的实际 URL。</p>
<pre><code>https://dl.dropboxusercontent.com/s/cq8y6x29e6ku65r/database.sqlite?token_hash=AAH9fdYQzZ6zj8CzhKVBGMi4LcaCRCHNKIlw88wLLskRWQ&dl=1
</code></pre>
<p>我尝试了您的代码并打印了从 sqlite db 获取的 <code>list</code> 数组,这是我在日志中得到的结果,</p>
<pre><code>(
Ahri,
Aatrox
)
</code></pre>
<p>希望有帮助!</p></p>
<p style="font-size: 20px;">关于ios - iOS 应用程序中的 SQlite 数据库在下载后被加密,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/18378281/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/18378281/
</a>
</p>
页:
[1]