2013-08-01 1 views
2

처음으로 iOS에서 sqlite3을 사용하고 있습니다. sqlite3_open(const char *filename, sqlite3 **ppDb) 함수를 사용하여 데이터베이스에 대한 연결을 열어야하는 부분에서 처음으로 iOS에서 sqlite3을 사용하고 있습니다. 나는 다음과 같은 코드를 통과했다 :sqlite3_open() 인수

에 대한 ?:memory: 무엇
int err = sqlite3_open((databasePath ? [databasePath fileSystemRepresentation] : ":memory:"), &db); 
    if(err != SQLITE_OK) { 
     NSLog(@"error opening!: %d", err); 
     return NO; 
    } 

.. 여기 이 databasePath는 데이터베이스의 경로를 포함 NSStringdb 것은 sqlite3의 인스턴스입니다.

+0

그냥 제안합니다. 'fmdb' sqlite 래퍼를 사용하여 iPhone 애플리케이션 내부에서 sqlite를 쉽게 사용할 수 있습니다. –

+0

확실합니다 .. 감사합니다 .. – Shradha

+0

정말'sqlite3_open_v2' 함수를 사용해야합니다. 당신은'sqlite3_open'보다 더 잘 제어 할 수 있습니다. – rmaddy

답변

0

? 다음으로 :을 "3 항 연산자"라고합니다.

라인 (databasePath ? [databasePath fileSystemRepresentation] : ":memory:") 수단 : 사실, [databasePath fileSystemRepresentation]를 사용

databasePath 경우, 다른 ":memory:"를 사용합니다.

라인은 다음의 한 줄 에디션은 다음과 같습니다

if(databasePath) { 
    return [databasePath fileSystemRepresentation]; 
} else { 
    return ":memory:"; 
} 

:memory:은 인 - 메모리 데이터베이스입니다. 자세한 내용은 docs을 참조하십시오.

2

?:은 3 진수 연산자입니다 (here). 내가 훨씬 더 간결하고, 당신이 동의 할 거라고 확신으로,

int err; 
if (databasePath) 
    err = sqlite3_open([databasePath fileSystemRepresentation], &db); 
else 
    err = sqlite3_open(":memory:", &db); 
if (err != SQLITE_OK) { 

를하지만이 특정 인스턴스에서

이 글을 쓰는 바로 가기 방법이있다.

+0

(databasePath) 일부 값 (모든 NSString 개체)이 포함되어 있으면 TRUE를 반환합니다. 그것은 true를 반환하기 위해 NULL과 동등하지 않아야합니다 .. 맞습니까? – Shradha

+0

예; 더 나은 테스트는'if ([databasePath length])'이며,'databasePath == nil' 또는 비어 있으면'NO'가됩니다. – trojanfoe