Доступ к нескольким базам данных sqlite в одном приложении iphone? - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть 2 базы данных в моем основном комплекте, и мне нужно получить доступ к обеим, чтобы получить их данные и сравнить их,

Когда я пытаюсь получить доступ к одному из них по отдельности, у меня не возникает проблем. Но когда я пытаюсь получить доступ к ним обоим, я получаю данные одной базы данных, а не обе! Я использую эту функцию для создания БД

+(void) InstantiateYourDatabase:(NSString *)DatabaseName {
     / /Using NSFileManager we can perform many file system operations.
     NSFileManager *fileManager = [NSFileManager defaultManager];

NSError *error;
NSString *dpname=DatabaseName;

_dbPath = [self getDBPath:dpname];

BOOL success = [fileManager fileExistsAtPath:_dbPath];

NSLog(@"success == %i",success);

if( !success) {

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] 
                               stringByAppendingPathComponent:DatabaseName];
     success = [fileManager copyItemAtPath:defaultDBPath toPath:_dbPath error:&error];

    }  

}

и это, чтобы открыть соединение

+(void) openconnection
{ 
      NSString *rDBName=@"Encrypteed.sqlite";
   NSString *cDBKey =@"secret"; 

    if(sqlite3_open([_dbPath UTF8String],&database)==SQLITE_OK)
    {    
          NSLog(@"connection to the database,,opened");
    }
    else
          NSLog(@"connection failed");  
}

тогда в представлении сделал загрузку другого класса, который я использую

[SqliteClass InstantiateYourDatabase:@"db1.sqlite"];
[SqliteClass openconnection];

NSMutableArray *array=[[NSMutableArray alloc]initWithArray:  [SqliteClass getNames:@"names"]];

[SqliteClass InstantiateYourDatabase:@"db.sqlite"];
[SqliteClass openconnection];
 NSMutableArray *toCompareArray=[[NSMutableArray alloc]init ];
[toCompareArray addObjectsFromArray:[SqliteClass getNames:@"Name"]];

Класс Sqlite является другим классом, где у меня есть все упомянутые методы ,,, 'getNames' также является методом класса ... Я получаю одну базу данных ,,, Я перепробовал много tin = mes ,, в моих базах нет ничего плохого, я искал в гугле без всяких намеков ,,

но я думаю, что многопоточность - это решение, хотя я понятия не имею о многопоточности

Есть идеи?!

1 Ответ

0 голосов
/ 17 ноября 2011

Вы используете методы и переменные класса для доступа к нескольким базам данных, но это просто не сработает. Я предполагаю, что _dbPath является статической переменной, поэтому вы можете получить к ней доступ в своем методе класса? Если это так, то во второй раз, когда вы звоните InstantiateYourDatabase, вы меняете это значение.

Я бы создал службу доступа к данным (может быть одноэлементной), которая управляет словарем, содержащим данные вашей базы данных, после чего вы можете обращаться к каждому из них с помощью соответствующего ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...