Я пытаюсь создать БД, используя Sqlite3 в приложении iOS. Если я создаю БД в подпапке документа dir, он НЕ создает БД, он не может открыть или создать базу данных. Если я не создаю БД во вложенной папке, вместо этого, если я непосредственно создам ее в каталоге документа. Он создает его правильно.Не удалось создать базу данных sqlite в подпапке каталога документов
Это дает путь, DataBasePath: "/ уаг/мобильный/Контейнеры/Data/Application/986037DB-6FA0-4066-9977-C5D7A075C5E7/Do cuments/MailFolder/INBOX.db" Но это не удается при - >if (sqlite3_open(dbpath, &database) == SQLITE_OK)
- Ниже мой код создает БД в подпапке. Может ли кто-то исправить меня, что здесь не так?
- (BOOL) createFolderMailDB :(NSString *) dbName {
NSString *docsDir;
NSArray *dirPaths;
// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
//docsDir =[[dirPaths objectAtIndex:0] stringByAppendingPathComponent:@"MailFolder"];
NSString *documentsPath = [dirPaths objectAtIndex:0];
docsDir = [documentsPath stringByAppendingPathComponent:@"/MailFolder"];
//docsDir = dirPaths[0];
// Build the path to the database file
NSMutableString *finalDBPath = [[NSMutableString alloc]init];
[finalDBPath appendString:dbName];
[finalDBPath appendString:@".db"];
databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: finalDBPath]];
NSLog(@"databasePath: %@", databasePath);
BOOL isSuccess = YES;
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: databasePath] == NO)
{
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
char *errMsg;
const char *sql_stmt = "create table if not exists MailFolderDBTable (emailid text, foldername text, messagedata text)";
if (sqlite3_exec(database, sql_stmt, NULL, NULL, &errMsg)
!= SQLITE_OK)
{
isSuccess = NO;
NSLog(@"Failed to create table");
}
sqlite3_close(database);
return isSuccess;
}
else {
isSuccess = NO;
NSLog(@"Failed to open/create database");
}
}
return isSuccess;
}
Сначала вам нужно создать подпапку. – rmaddy
BTW - избавиться от «косой черты» при вызове 'stringByAppendingPathComponent'. Весь смысл этого метода состоит в том, чтобы обеспечить, чтобы для вас был добавлен правильный разделитель путей. – rmaddy
Я создаю только подкаталог. Он задает путь как «/var/mobile/Containers/Data/Application/986037DB-6FA0-4066-9977-C5D7A075C5E7/Documents/MailFolder/INBOX.db« Но здесь он не работает-> if (sqlite3_open (dbpath, & database) == SQLITE_OK) – user1953977