SQLite поддерживает "datareader"? - PullRequest
1 голос
/ 19 апреля 2011

Я пытаюсь использовать datareader в SQLite, но не могу найти что-либо в моих документах («Использование SQLite» от Kreibich).

Может кто-нибудь сказать мне, если это поддерживается и где я могу найти некоторые примеры?

Ответы [ 2 ]

1 голос
/ 27 августа 2011

API sqlite имеет концепцию, которая логически эквивалентна .net reader.Это означает, что вы выполняете запрос, а затем повторяете считанные данные по мере необходимости.Это сохраняет память на низком уровне, так как вы не извлекаете полный набор результатов в память.

Прежде всего, взгляните на другие обертки, такие как fmdb.

здесь эквивалентно использование c api внутри iPhone,Вы подготавливаете оператор, передавая запрос sql (sqlite анализирует под обложкой), затем вызываете step, который эквивалентен методу чтения .net reader.Вы читаете столбцы так же, как читатель данных .net.Обратите внимание, что этот пример готовит и завершает (очищает).Более эффективный подход состоит в том, чтобы сохранить подготовленный оператор и затем вызвать сброс, чтобы избежать использования 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);  
1 голос
/ 19 апреля 2011

Да, вам просто нужно получить себя System.Data.SQLite .

Он поставляется в двух вариантах: один со встроенным SQLite, а другой требует, чтобы вы также поставили отдельную встроенную библиотеку DLL sqlite.

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