2011-11-17 2 views
0

내 번들에 2 개의 데이터베이스가 있으며 데이터를 가져 와서 비교하기 위해 두 가지 모두에 액세스해야합니다.하나의 아이폰 앱에서 여러 sqlite 데이터베이스에 액세스 하시겠습니까?

개별적으로 액세스하려고하면 아무런 문제가 없습니다. 그러나 둘 모두에 액세스하려고하면 둘 다 하나의 데이터베이스 데이터 만 얻게됩니다! 나는 DB

+(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]; 

    } 

} 

을 intstantiate이 기능을 사용하고이 뷰에서 다음 연결

+(void) openconnection 
{ 
     NSString *[email protected]"Encrypteed.sqlite"; 
    NSString *cDBKey [email protected]"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는 클래스가 사용 onther 클래스에서 언급 한 모든 메소드가 있는데, 'getNames'는 클래스 메소드이기도합니다 ... 하나의 데이터베이스 데이터가 있습니다 ,,, 내 데이터베이스의에는 잘못이 없다 ,, 많은 주석 =의 MES를 시도, 나는 ,, 좋은 힌트없이 구글에

를 검색하지만

멀티 스레딩에 대해 아무 생각이 없지만 그 멀티 스레딩을 생각하고하는 것은 해결책이다

어떤 아이디어?!

답변

0

여러 데이터베이스에 액세스하기 위해 클래스 메소드와 변수를 사용하고 있습니다. 단지 작동하지 않을 것입니다. _dbPath은 정적 변수이므로 클래스 메소드에서 액세스 할 수 있다고 가정합니까? 이 경우 두 번째로 InstantiateYourDatabase으로 전화하면이 값이 변경됩니다.

데이터베이스 세부 정보를 보유하고있는 사전을 관리하는 데이터 액세스 서비스 (싱글 톤일 수 있음)를 만들면 적절한 키를 통해 각각의 데이터베이스에 액세스 할 수 있습니다.

+0

나는 다른 응용 프로그램에서 SqliteClass 및 인스턴스 메서드의 개체를 사용하려고했습니다. 같은 오래된 결과와 함께, 나는 오류 메시지를 얻을, 아니 같은 테이블을 발견 : nameOfTable, _dbPath는 정적 문자열입니다 나에게 그런 서비스를 만드는 방법에 대한 힌트를 줄 수 있습니까? –

+0

CoreData를 사용하지 않는 이유가 있습니까? 이것을 크게 단순화합니다! –

+0

sqlite를 직접 사용하는 것이 더 빠를 것입니다. 어떤 래퍼도 사용하지 않았습니다. 현재로서는 방금 열린 메서드 대신 두 개의 열린 메서드를 사용합니다. 대신 IOS OS가 아닌 'MAC OS'응용 프로그램을 사용합니다. 나는 그 어떤 아이디어도 가지지 않고있다! !!! 하지만 지금 내 욕구를 유지, 그리고 thnx 시간 동안 많이 .. –

관련 문제