Я хочу создать простое приложение для iOS. Это приложение загружает простую базу данных SQlite из URL. Но когда база данных загружается и хранится в папке «Документы», я не могу ее открыть некоторым менеджером SQLite, потому что она говорит, что она зашифрована, несмотря на то, что исходная база данных не является.База данных SQlite в приложении iOS зашифрована после загрузки
Также код для чтения этой базы данных не работает, и я думаю, это потому, что база данных зашифрована в папке «Документы». Вот что я получил до сих пор.
-(void) downloadDatabase {
NSString *stringURL = @"https://www.dropbox.com/s/cq8y6x29e6ku65r/database.sqlite";
NSURL *url = [NSURL URLWithString:stringURL];
NSData *urlData = [NSData dataWithContentsOfURL:url];
if (urlData != nil)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"database.sqlite"];
[urlData writeToFile:filePath atomically:YES];
NSLog(@"Stahujem databazu do: %@", filePath);
}
}
Вот как я загружаю базу данных в приложение.
// Get the documents directory
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = dirPaths[0];
// Build the path to the database file
NSString *databasePath = [[NSString alloc]
initWithString: [docsDir stringByAppendingPathComponent:
@"database.sqlite"]];
const char *dbpath = [databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &myDatabase) == SQLITE_OK)
{
NSString *querySQL = @"SELECT * FROM CHAMPIONS";
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(myDatabase, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
[list removeAllObjects];
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSString *text = [[NSString alloc]
initWithUTF8String:
(const char *) sqlite3_column_text(
statement, 1)];
[list addObject:text];
statusOfGettingDataFromDB = @"Found!";
NSLog(@"count: %d", [list count]);
}
sqlite3_finalize(statement);
}
sqlite3_close(myDatabase);
}
И с помощью этого кода я пытаюсь получить некоторые данные из базы данных. Но после sqlite3_prepare_v2
он прыгает прямо в конец.
Можете ли вы, пожалуйста, сообщить мне, что я сделал неправильно? И посоветуйте мне, как это исправить? Я буду очень благодарен. Спасибо.
Awesome. Большое спасибо. Мне нужно получить FTP :-) – Martin