我想在SQLite中使用數據讀取器,但無法找到我擁有的文檔中的任何內容(Kreibich使用的「使用SQLite」)。SQLite是否支持「datareader」?
有人可以告訴我它是否受支持,我可以在哪裏找到一些示例?
我想在SQLite中使用數據讀取器,但無法找到我擁有的文檔中的任何內容(Kreibich使用的「使用SQLite」)。SQLite是否支持「datareader」?
有人可以告訴我它是否受支持,我可以在哪裏找到一些示例?
是的,你只需要讓自己System.Data.SQLite。
它有兩種變體,一種是內置SQLite的,另一種需要您也提供獨立的本地sqlite DLL。
我忘了提及這是Objective-C代碼...我已經知道System.Data.SQLite ...對不起,誤導你... – SpokaneDude 2011-04-18 23:04:50
@ Spokane-Dude:哦,你現在很麻煩,先生! ;) – MPelletier 2011-04-19 00:30:09
sqlite api的概念在邏輯上等同於.net閱讀器。這意味着,您發出查詢,然後根據需要迭代讀取數據。由於不將完整的結果集拉入內存,因此可以保持較低的內存。
首先,看看其他包裝如fmdb。
這裏是使用iPhone內部的c api的等價物。你通過傳遞sql查詢來準備語句(sqlite在封面下解析),然後調用與.net閱讀器讀取方法等效的步驟。你像.NET數據閱讀器一樣閱讀列。請注意,此示例準備並完成(清理)。更有效的方法是保存準備好的語句,然後調用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);
通過datareader你的意思.NET的datareader? – MPelletier 2011-04-18 22:13:33
呃哦...我想我現在有麻煩了...是的,我想這是.NET的數據採集器...在SQLite中有沒有相當的東西? – SpokaneDude 2011-04-18 22:21:37
我跟着你很難過。 SQLite是一個數據庫實用程序。它可用作DLL或EXE。它沒有「有」一個datareader在裏面。如果我瞭解你,你將需要像@enverpex所建議的互操作庫。 – MPelletier 2011-04-18 23:05:23