2011-04-18 6 views
1

SQLite에서 datareader를 사용하려고하는데, 가지고있는 문서에서 아무것도 찾을 수 없습니다 ("Using SQLite"by Kreibich).SQLite는 "datareader"를 지원합니까?

누군가가 지원되는지 알려주고 예제를 찾을 수 있습니까?

+0

datareader로 말하면 .NET의 데이터 보관함입니까? – MPelletier

+0

어 ... 오 .. 내가 이제 곤경에 처한 것 같아 ... 네, .NET 데이터웨어 하우스라고 생각합니다 ... SQLite에 상응하는 프로그램이 있습니까? – SpokaneDude

+0

나는 너를 따라 가기 힘든 시간을 보내고있다. SQLite는 데이터베이스 유틸리티입니다. DLL 또는 EXE로 사용할 수 있습니다. 그것 안에 "datareader"가 없다. 내가 이해한다면, @enverpex와 같은 interop 라이브러리가 필요하다. – MPelletier

답변

1

네, 단지 자신을 얻을 필요가 System.Data.SQLite.

두 가지 변형이 있습니다. 하나는 SQLite가 내장되어 있고 다른 하나는 고유 한 sqlite DLL을 제공해야합니다.

+0

이것이 Objective-C 코드라는 것을 잊어 버렸습니다 ... 이미 System.Data.SQLite에 대해 알고 있습니다 ... 오해의 소지가있어서 미안 해요 ... – SpokaneDude

+0

@ Spokane-Dude : 오, 선생! ;) – MPelletier

1

sqlite api에는 논리적으로 .net reader와 동일한 개념이 있습니다. 즉, 쿼리를 실행 한 다음 필요에 따라 데이터를 반복합니다. 완전한 결과 세트를 메모리로 가져 오지 않도록 메모리를 낮게 유지합니다.

먼저 fmdb와 같은 다른 래퍼를 살펴보십시오.

여기는 iPhone 내부의 API를 사용하는 것과 같습니다. SQL 쿼리 (sqlite는 표지 아래에서 구문 분석)를 전달하여 문을 준비한 다음 .net reader read 메서드와 동일한 step을 호출합니다. 너는 .net 자료 독자 같이 란을 읽는다. 이 예제에서는 준비하고 정리 (정리)합니다. 보다 효율적인 접근 방법은 prepared statement를 저장 한 다음 reset을 호출하여 sqlite가 질의를 계속해서 구문 분석하지 않도록하는 것입니다.

// prep statement 
sqlite3_stmt *statement; 
NSString *querySQL = @"SELECT id, name FROM contacts"; 
NSLog(@"query: %@", querySQL); 
const char *query_stmt = [querySQL UTF8String]; 

// preparing a query compiles the query so it can be re-used. 
sqlite3_prepare_v2(_contactDb, query_stmt, -1, &statement, NULL);  

// process result 
while (sqlite3_step(statement) == SQLITE_ROW) 
{ 
    int idx = 0; 
    Contact *contact = [[Contact alloc] init]; 

    NSNumber *idField = [NSNumber numberWithLongLong:sqlite3_column_int64(statement, idx++)]; 
    [contact setId:idField]; 

    NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, idx)]; 
    [contact setName:nameField]; 

    NSLog(@"id: %@", [contact id]); 
    NSLog(@"name: %@", [contact name]);    

    [nameField release]; 

    [contactsList addObject:contact]; 
    [contact release]; 
} 

sqlite3_finalize(statement);